重複を確認する唯一の方法は、std::pair.second
を挿入してfalse
を確認することですが、問題は、キーが使用されていない場合でも何かを挿入することですが、欲しいのはmap.contains(key);
です関数。
my_map.count( key )
;を使用します0または1のみを返すことができ、これは基本的に必要なブール結果です。
または、my_map.find( key ) != my_map.end()
も機能します。
Potatoswatterの答えは大丈夫ですが、代わりにfind
またはlower_bound
を使用することを好みます。 lower_bound
は、同じキーを持つものを挿入したい場合に、返された反復子を後でヒント付き挿入に使用できるため、特に便利です。
map<K, V>::iterator iter(my_map.lower_bound(key));
if (iter == my_map.end() || key < iter->first) { // not found
// ...
my_map.insert(iter, make_pair(key, value)); // hinted insertion
} else {
// ... use iter->second here
}