2

私は同じ質問をbeforeboost::assign::map_list_of(これは答えられませんでした)としましたが、おそらく括弧の初期化を使用すると助けになると思いました。std :: map :: operator =イニシャライザリストの使用方法

これは完璧に動作します:

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がメンバー変数の場合

+0

だから、問題は、あなたがこれをコンパイルするのVisual C++ 2015にアップグレードすることができないということですちょうどいい? –

+0

@ChristianHacklは情報に感謝しますが、私が働いている場所では通常、他のバージョンのVisual Studioはスキップします。 :( –

+0

悪運、その後:) –

答えて

3

一時的に作成して割り当てに使用できます。

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

あなたはタイプを繰り返したくない場合は、decltypeを使用することができます。ポストSO関連

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

は:

関連する問題