如何使用std :: map :: operator =和初始化列表

时间:2016-11-16 17:27:25

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

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

这非常有效:

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是成员变量的情况。

1 个答案:

答案 0 :(得分:3)

您可以构建一个临时文件并在作业中使用它。

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帖子: