【问题标题】:c++11: initialize map with explicit initializer_list object [duplicate]c ++ 11:使用显式initializer_list对象初始化地图[重复]
【发布时间】:2015-05-27 20:49:26
【问题描述】:

在 C++11 中,我可以像这样使用 initializer_list 初始化地图:

map<string, int> mymap = {{"first", 1}, {"second", 2}};

但不是这样的:

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

map<string, int> mymap2{il};

知道为什么吗?是否有不同的语法或根本不可能?

谢谢。

【问题讨论】:

    标签: c++11 initializer-list


    【解决方案1】:

    mapinitializer_list 构造函数采用value_type 的列表,这是一个pair 与第一个元素const

    这将起作用:

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

    【讨论】:

    • 即使没有const 它也应该可以工作。
    • @kvivek 你为什么这么说?
    • 我知道const 是这样做的正确方法,但这不应该是强制性的。即使没有它,我的代码也会编译。
    • @kvivek 也许您的编译器不兼容或提供了扩展?
    • 如果完成了这个map&lt;string, int&gt; mymap2{il};的赋值,则必须有const,否则使用initializer_list&lt;pair&lt;string,int&gt;&gt; il = {{"first", 1}, {"second", 2}};创建地图本身不会报错。
    猜你喜欢
    • 2012-06-12
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 2012-01-17
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多