【问题标题】:Initialization of map with a list as value以列表为值初始化地图
【发布时间】:2019-11-29 20:39:53
【问题描述】:

我正在尝试初始化一个包含列表的地图

map<string, list<int>> firstNamesMap = {{"name1", new list<int>}};

我收到以下错误:

error: could not convert ‘{{"name1", (operator new(8), (<statement>, ((std::list<int>*)<anonymous>)))}}’ from ‘<brace-enclosed initializer list>’ to ‘std::map<std::basic_string<char>, std::list<int> >’
 map<string, list<int>> firstNamesMap = {{"name1", new list<int>}};
                                                                 ^

我最初试图用list&lt;Data *&gt; 而不是list&lt;int&gt; 来初始化一个更大的映射,其中“Data”是前面声明的一个简单类。不管怎样,它都会产生同样的错误。

不确定是否重要,但我在 Cygwin 中使用 g++ 进行编译。

【问题讨论】:

    标签: c++ c++11 initialization stdmap initializer-list


    【解决方案1】:

    new list&lt;int&gt; 产生一个指向list&lt;int&gt; 的指针(即list&lt;int&gt; *)。但是,查看map映射类型

    map<string, list<int>> 
                ^^^^^^^^^
    

    您真正需要的是list&lt;int&gt;,而不是list&lt;int&gt;*


    在初始化地图时尝试使用list&lt;int&gt;() 而不是new list&lt;int&gt;

    map<string, list<int>> firstNamesMap = {{"name1", list<int>()}};
    

    【讨论】:

    • 或者,甚至是矮个子:map&lt;string, list&lt;int&gt;&gt; firstNamesMap = {{"name1", {}}};.
    猜你喜欢
    • 2013-10-16
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    相关资源
    最近更新 更多