2012-03-02 12 views
0

は私がMSDN pageからもらったこのコードにコンパイルすることができますunordered_map挿入()エラー

using namespace std 
typedef std::unordered_map<char, int> Mymap; 
Mymap c1; 

c1.insert(Mymap::value_type('a', 1)); 
c1.insert(Mymap::value_type('b', 2)); 
c1.insert(Mymap::value_type('c', 3)); 

をしかし、私はそれがために変更されたとき:

using namespace std 
typedef std::unordered_map<int, vector<int> > Mymap; 
Mymap c1; 

c1.insert(Mymap::value_type(1, vector<int> v (1,1))); 
c1.insert(Mymap::value_type(2, vector<int> v (1,2))); 
c1.insert(Mymap::value_type(3, vector<int> v (1,3))); 

私はエラー(行番号を取得しますスニペットでは明らかにオフです)。

myfile.cpp:121:29: error: expected primary-expression before ‘(’ token 
myfile.cpp:121:45: error: expected primary-expression before ‘v’ 
myfile.cpp:122:32: error: expected primary-expression before ‘(’ token 
myfile.cpp:122:48: error: expected primary-expression before ‘v’ 
myfile.cpp:123:32: error: expected primary-expression before ‘(’ token 
myfile.cpp:123:48: error: expected primary-expression before ‘v’ 

ハッシュマップは "int => intのリスト"である必要があります。リストは1つの番号で初期化されます。

ここで問題は何ですか? value_type以外のものを使用する必要がありますか?あなたが探しているものを

答えて

3
c1.insert(Mymap::value_type(1, vector<int> v (1,1))); 
             ^// What's this 'v' doing there? 

は次のとおりです、ないvではありません

c1.insert(Mymap::value_type(1, vector<int>(1,1))); 

vector<int> v(1, 1);はタイプvector<int>の変数を宣言していますが、変数を宣言しようとしていないため、名前が必要ない(または許可されていない)一時オブジェクトを作成しようとしています。

+0

ああ!私はC++プログラマーではなく、ベクターコードもコピーして、あなたに一時的な名前が必要だと仮定しました。 –