2

unordered_map :: find()の機能は、0の値でルックアップするキーを自動的に挿入することですか?これをはっきりさせておきます

    unordered_map<int, int> tempMap;
    //some code
    if(tempMap.find(1) == tempMap.end()){
      //do something but not insert the 1 with a corresponding value into the tempMap
    }

したがって、もう一度1を検索すると、対応する値として0を持つtempMapに表示されますか。それはunordered_mapの機能ですか?

4

2 に答える 2

8

いいえ、findイテレータを検索して返すだけです。

そうは言っても、std::unordered_map(およびstd::map)両方のオーバーロードは、必要に応じoperator[]てデフォルト挿入します。

// if element with a key value one exists, return that. otherwise, insert
// a default initialized element (zero in this case), and return that
auto& val = tempMap[1]; 
于 2011-09-15T17:30:46.257 に答える
4

いいえ-find値を挿入しません。

以前に存在していなかった値を挿入する場合は、operator[]の代わりにを使用できますfind

これはoperator[]、オブジェクトへの参照を返すために行われます。null参照などは存在しないため、基本的に唯一の代替手段は、以前は存在しなかったアイテムを検索するときに例外をスローすることです。その動作を採用したコンテナがいくつかありますが、それは明らかにあまり有用ではなく、あまり人気がありませんでした(私はそのようなコンテナをいくつか使用しましたが、それは苦痛でした)。

于 2011-09-15T17:42:55.917 に答える