2016-03-31 5 views
4

を参照してくださいコード:wordCountにkeyが存在しない場合、unordered_map <string, int>に++ wordCount [key]を使用する必要がありますか?以下

unordered_map<string, int> wordCount; 
for(string word: words) 
    ++wordCount[word]; 

質問:

は単語がWORDCOUNTに存在しない場合++wordCount[word];を使用して、それを右ここにいますか?私はいつもこのように使っている人を見ましたが、私は本当にそれについて確信していません。

説明hereは言った:kはコンテナ内の任意の要素のキーと一致しない場合

は、 関数は、そのキーを使用して新しい要素を挿入し、そのマッピングされた値を参照 を返します。要素にマップされた値が割り当てられていない場合でも、コンテナ のサイズは1つずつ増加します( 要素はデフォルトコンストラクタを使用して構成されています)。

と私はそれがint is uninitialized in defaultであることを知っています。だから、このように地図の価値を直接増やすのは安全ではないと思いますよね?デフォルトのアロケータを使用する場合

+0

私はデフォルト構成のintは0だと思います。 'int()' – dreamlax

答えて

5

operator[]

にcppreferenceのドキュメントを引用し、これはキーから構築キービーイングのコピーをもたらし、マッピングされた値が値に初期化されて。

キーワードはvalue-initializedです。値を初期化したintはゼロです。ここで

は([unord.map.elem]、C++ 14、23.5.4.3項2)official referenceです:

効果:unordered_mapはすでにその鍵となる要素が含まれていない場合kに等しい場合、第1演算子は値value_type(k, mapped_type())を挿入し、第2演算子は 値value_type(std::move(k), mapped_type())を挿入します。

注意mapped_type = intためゼロ値intを構築するであろうmapped_type()、。

関連する問題