2012-03-02 99 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列表」。列表使用一個數字進行初始化。

這裏有什麼問題?我需要使用value_type以外的東西嗎?

回答

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

你所尋找的是:

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

也就是說,沒有vvector<int> v(1, 1);聲明瞭一個類型爲vector<int>的變量,但您並不是試圖聲明變量,而是試圖構造一個臨時對象,對於該臨時對象,不需要(或允許)名稱。

+0

啊!我不是C++程序員,也複製了矢量代碼,並假定你需要一個臨時名稱。 – 2012-03-02 03:12:07