2012-03-02 126 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