2011-09-09 7 views
4

unordered_mapのコンセプトはいつg ++に組み込まれましたか?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; 
} 

次のように私は、コードをコンパイルしています:

inavalid種類がaaray添字

のために[[文字をint型:

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

私が得たエラーはこれですこれに対する修正は何ですか?

+0

以下のソリューション以外にも、キーを提供するために文字のみを使用しているので、テンプレートをからに変更することを検討できます。ちょうど観測/提案! –

+0

これは 'std :: int'のためにコンパイルすべきではありません。これは有効なC++ではありません。 –

+1

'stdio.h'は少なくとも13年前から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

@トマラク:あなたは正しい "この場所で"より良いです。 – mkaes

+0

ええ、私もそれを見ました。しかし、私はそれをメインに置くことはできません。 –

5

はまず、mkaesが指摘するように、あなたが例mainのために、いずれかでそれを置くために持っているので、あなたは、割り当てに外部の関数を入れることはできません。

#include <tr1/unordered_map> 

とタイプstd::tr1::unordered_map:あなたがC++ 11に行きたくない場合はunordered_mapについては

は、GCCの最近のバージョンのために、あなたはunordered_mapのTR1のバージョンを使用することができます。あなたが知っているのは、C++ 11がこれに取って代わるものですが、(少なくともGCCでは)これが実現します。

関連する問題