如何将 std::map::operator= 与初始值设定项列表一起使用

Posted

技术标签:

【中文标题】如何将 std::map::operator= 与初始值设定项列表一起使用【英文标题】:How to use std::map::operator= with initializer lists 【发布时间】: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。 :( 【参考方案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 帖子:

Initializing map of maps with initializer list in VS 2013 Using Initializer Lists with std::map Is this a compiler bug? Am I doing something wrong?

【讨论】:

以上是关于如何将 std::map::operator= 与初始值设定项列表一起使用的主要内容,如果未能解决你的问题,请参考以下文章

std::map::operator[] 在 Windows 上违反访问内存

如果键不存在,为啥 std::map operator[] 会创建一个对象?

Swinject:如何将委托模式与接口隔离(类与接口)一起使用?

如何将 'afterColumnResize' 事件与 'rhandsontable' 一起使用?

如何将 Quickblox 与 angularjs 集成?

如何将手表与 iPhone 连接