3

以前に同じ質問をしましたが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&&)です。

2 番目のバージョンを動作させることは可能ですか? たとえば、mがメンバー変数である場合。

4

1 に答える 1

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 の投稿:

于 2016-11-16T17:33:06.423 に答える