我可以编译我从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
以外的其他内容?
答案 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)));
即没有v
。 vector<int> v(1, 1);
声明了一个vector<int>
类型的变量,但是你没有尝试声明一个变量,而是试图构造一个临时对象,不需要(或允许)任何名称。