まず、C ++で[]演算子をunordered_mapと組み合わせてルックアップに使用すると、find()メソッドの呼び出しがラップされるのか、それとも[]演算子をfind()よりも速く使用するのかを明確にできますか?
次に、次のコードでは、キーがunordered_mapにまだ含まれていないmap[key] = value
場合に、[]演算子を使用して作成されたデフォルト値を置き換えるために、行を介して2回目のルックアップを実行していると思われます。キーがありません。
それは本当です。もしそうなら、(おそらくポインタなどを使用して)どのような場合でも(おそらく値を配置する場所のアドレスを格納する/値を読み取ることによって)1回のルックアップのみを実行する方法があります。それでも同じ機能を実現しますか?もしそうなら、明らかにこれは有用な効率改善になるでしょう。
変更されたコードの抜粋は次のとおりです。
int stored_val = map[key]; // first look up. Does this wrap ->find()??
// return the corresponding value if we find the key in the map - ie != 0
if (stored_val) return stored_val;
// if not in map
map[key] = value;
/* second (unnecessary?) look up here to find position for newly
added key entry */
return value;