C++11:使用显式初始化列表对象初始化map

10
在C++11中,我可以使用initializer_list来初始化一个map,如下所示:
map<string, int> mymap = {{"first", 1}, {"second", 2}};

但不是这样:

initializer_list<pair<string,int>> il = {{"first", 1}, {"second", 2}};

map<string, int> mymap2{il};

你知道这是为什么吗?是因为有不同的语法还是根本不可能实现?

谢谢。

1个回答

10

mapinitializer_list构造函数接受一个value_type列表,其中每个value_type是一个带有第一个元素为constpair

这将起作用:

initializer_list<pair<string const,int>> il = {{"first", 1}, {"second", 2}};
                            ^^^^^^

即使没有 const,它也应该能正常工作。 - kvivek
@kvivek 你为什么这么说? - ecatmur
我知道使用 const 是正确的做法,但这不应该是强制性的。即使没有使用 const,我的代码也可以编译。 - kvivek
如果执行此 map<string, int> mymap2{il}; 赋值操作,则必须使用 const,否则使用 initializer_list<pair<string,int>> il = {{"first", 1}, {"second", 2}}; 创建映射本身不会引发任何错误。 - kvivek
非常有用,我找了很久!初始化列表模板参数的格式不清楚。我找了几个小时也找不出错误在哪里。非常感谢。 - Ricardo_arg
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接