2011-09-09 36 views
4

g ++中內置unordered_map概念是什麼時候?GCC中的unordered_map錯誤

因爲以下代碼會引發錯誤。

#include<iostream> 
#include<unordered_map> 
#include<stdio.h> 

using namespace std; 

std::unordered_map<std::int,int> mirror; 

mirror['A'] = 'A'; 
mirror['B'] = '#'; 
mirror['E'] = 3; 

int main(void) 
{ 
    std::cout<<mirror['A']; 
    std::cout<<mirror['B']; 
    std::cout<<mirror['C']; 
    return 0; 
} 

我編譯的代碼如下:

g++ -c hashexample.cpp 
g++ -o result hashExample.o 
./result 

我得到的錯誤是這樣的:

inavalid類型int [字符[爲aaray標

這是什麼修復?

+0

除了下面提供的解決方案,您可以考慮將您的模板從更改爲,因爲您僅使用字符來提供密鑰。只是一個觀察/建議! –

+0

甚至不應該編譯,因爲'std :: int',這是無效的C++。 –

+1

至少13年前,'stdio.h'在C++中已被棄用,爲什麼你不縮進你的代碼? –

回答

5

問題是你的任務。你不能在這個地方給你的地圖賦值。 C++不是腳本語言。
這個程序能正常工作在我的機器上用gcc4.6:

#include<iostream> 
#include<unordered_map> 

std::unordered_map<int,int> mirror; 

int main() { 
    mirror['A'] = 'A'; 
    mirror['B'] = '#'; 
    mirror['E'] = 3; 

    std::cout<<mirror['A']; 
    std::cout<<mirror['B']; 
    std::cout<<mirror['C']; 
} 
+0

你可以這樣做,「不在這個地方」! –

+1

@Tomalak:你說得對「在這個地方」比較好。 – mkaes

+0

是的,我也看到了。但我不能把它放在主要。 – 2012-12-08 07:56:53

5

首先,mkaes指出,你不能把任務之外的功能,所以你必須把它放在任何,例如main

至於unordered_map,近期版本的gcc,如果你不想進入C++ 11,可以使用的unordered_map的TR1版本:

#include <tr1/unordered_map> 

和類型std::tr1::unordered_map。你知道,C++ 11取代了所有這些,但是你(至少在GCC中)可以正常工作。