是否可以为容器的容器使用括号括起的初始化列表?

时间:2015-08-07 14:39:01

标签: c++ initializer-list

据我所知,从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 ...

1 个答案:

答案 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}