unordered_map insert()错误

时间:2012-03-02 03:05:40

标签: c++ unordered-map

我可以编译我从MSDN page得到的代码:

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 =&gt;整数列表”。使用一个数字初始化列表。

这是什么问题?我是否需要使用value_type以外的其他内容?

1 个答案:

答案 0 :(得分: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>类型的变量,但是你没有尝试声明一个变量,而是试图构造一个临时对象,不需要(或允许)任何名称。