2017-10-13 6 views
-3

マップに入力する既存のコードです。異なる方法でマップにデータを入力する

typedef unordered_map<std::string, SomeSet> StringToSetMap; 

StringToSetMap myMap; 

std::string str ("hello"); 

SomeSet &mySet = myMap[str]; //Map populates here 

"SomeSetは" typedefed unordered_setです。私は方法でのみ移入することができます知っているよう

マップがどのようにこれは、このようマップを移入されhere

に言及しましたか?

+3

何:

(キーが構築され、移動またはコピー構築のどちらかであるが、いずれかの方法は、値が常にデフォルトに構築され、あなたがSomeSetのデフォルトコンストラクタを持っていることを確認します。!)リンクして、ここで起こっていることが不明確になっていますか? – NathanOliver

答えて

1

See the docs問題の下付き文字演算子です。オペレータの説明は、それ...

は、キーが既に

が存在しない場合 挿入を行う、キーにキー同等にマッピングされた値への参照を返すことであることに注意してください

にも注意してください:マッピングされた値0に

戻り値を

リファレンスkeyキーが の要素が存在しない場合は、新しい要素。さもなければキーがキーに相当する既存の要素 のマップされた値への参照。

"hello"はマップ内のキーではないため、挿入されて光沢のある新しいSomeSetオブジェクトへの参照が返されます。質問の答えについて

+1

挿入された要素がデフォルトで構築されることを指摘しておきましょう。また、添字演算子は、デフォルトのコンストラクタを持つ型にマップする場合にのみ使用できます。 –

+0

@ scohe001したがって、mySetを最初に設定してから、 'myMap [str] = mySet'を実行することもできます。あれは正しいですか? – ontherocks

+0

@ontherocks確かに。 'myMap [str]'は新しい 'SomeSet'オブジェクトへの参照を返し、それを何かに設定します。 'SomeSet&thing = myMap [str];と同じです。 thing = mySet; ' – scohe001

関連する問題