があり、ハッシュされstd::unordered_map
たの最初の値をインクリメントすることと、への参照を作成することの両方が必要です。例えば:std::pair
key
key
std::unordered_map<int, std::pair<int, int> > hash;
hash[key].first++;
auto it(hash.find(key));
int& my_ref(it->first);
[]
演算子を使用する代わりに、を使用してデータを挿入するinsert()
こともできますが、後で割り当てを解除する場合でも、hash
すでにあるようにペアを割り当てkey
ます。ただし、確かではありません。明確にする:
// If "key" is already inserted, the pair(s) will be allocated
// and then deallocated, right?
auto it(hash.insert(std::make_pair(key, std::make_pair(0, 0))));
it->second.first++;
// Here I can have my reference, with extra memory operations,
// but without an extra search in `hash`
int& my_ref(it->first);
私は最初のオプションを使用する傾向がありますが、どちらが最適かを判断できないようです。これに対するより良い解決策はありますか?
PS:私にとって理想的な解決策は、最初の、おそらく役に立たない値の割り当てを必要としない挿入のようなものです。