【问题标题】:How to use std::map::operator= with initializer lists如何将 std::map::operator= 与初始值设定项列表一起使用
【发布时间】:2017-03-31 00:39:08
【问题描述】:

我问了关于boost::assign::map_list_of 的相同问题before(没有得到回答),然后我想也许使用大括号初始化会有所帮助,但没有。

这很好用:

std::map<int, char> m = {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}};

但这不是:

std::map<int, char> m;
m = {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}};

Visual Studio 2013 给出错误error C2593: 'operator =' is ambiguous,可能是operator=(std::initalizer_list)operator=(std::map&amp;&amp;)

是否有可能让第二个版本工作?例如,m 是成员变量的情况。

【问题讨论】:

  • 所以问题是你不能升级到Visual C++ 2015,它编译得很好?
  • @ChristianHackl 感谢您提供的信息,但在我工作的地方,我们通常会跳过所有其他版本的 Visual Studio。 :(

标签: c++ c++11 visual-studio-2013 assignment-operator uniform-initialization


【解决方案1】:

您可以构造一个临时的并在作业中使用它。

std::map<int, char> m;
m = std::map<int, char>{{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}};

如果不想重复输入,可以使用decltype

std::map<int, char> m;
m = decltype(m){{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}};

相关的 SO 帖子:

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 2016-07-30
    • 2017-08-13
    相关资源
    最近更新 更多