47

現在、次のようなコードがたくさんあります。

std::unordered_map<int,int> my_dict;
.
.
.
// If the key does exist in the dictionary
if(my_dict.count(key) == 1){
    my_dict[key] = value;
}

// If its a new key
else{
    my_dict.insert(std::make_pair(key,value));
}

毎回値を上書きするだけでこれを高速化する方法はありますか?

4

5 に答える 5

71

あなたは(とのためmapunordered_map)するだけです

mydict[key]=value;
于 2013-10-05T12:35:59.757 に答える
24

私はそれがこのように最速かもしれないと思います:

auto it = my_dict.find(key);
if( it != my_dict.end() ) {
    it->second = value;
}
else {
    my_dict.insert(std::make_pair(key,value));
}

unordered_mapそうすれば、 がkeyすでに存在し、ルックアップが 1 つしかない場合、 の構造を変更しません。


value後で必要/アクセスしない場合の別のオプション:

my_dict[key] = std::move(value);

valueこれは、 の代入が高価で、ムーブ セマンティクスの恩恵を受ける場合に適している可能性があります。

于 2013-10-05T12:32:53.753 に答える