据我所知,从C ++ 11开始,我可以使用大括号括起来的初始化列表初始化容器:
std::map<int, char> m = {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}};
容器容器也可以吗?
例如,我尝试了以下内容但没有成功:
std::pair<std::map<int, char>, int> a = {{1, 'c'}, 2};
在Visual Studio 2015中,我收到以下编译错误:
没有构造函数的实例“std :: map&lt; _Kty,_Ty,_Pr,_Alloc&gt; :: map [with _Kty = std :: map,std :: allocator&gt;&gt;,_Ty = int,_Pr = std :: less,std :: allocator&gt;&gt;&gt;,_ Alloc = std :: allocator,std :: allocator&gt;&gt;,int&gt;&gt;]“匹配参数列表 参数类型是:({...},int)
使用MinGW32时,编译错误就是
无法将大括号括号初始化列表中的{...}转换为std :: pair ...
答案 0 :(得分:8)
您的地图缺少方括号("c"
应为'c'
,因为"c"
是const char *
而不是char
,感谢Bastien Durel) :
std::pair<std::map<int, char>, int> a = {{{1, 'c'}}, 2};
要使用初始化列表初始化地图,您需要一个&#34;对的列表&#34;,类似于{{key1, value1}, {key2, value2}, ...}
。如果你想把它放在一对中,你需要添加另一个括号级别,这会产生{{{key1, value1}, {key2, value2}, ...}, second}
。