如何将 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&&)
。
是否有可能让第二个版本工作?例如,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:如何将委托模式与接口隔离(类与接口)一起使用?