回答:
を使用しmy_map.count( key )
ます。0または1のみを返すことができます。これは、基本的に必要なブール結果です。
交互にmy_map.find( key ) != my_map.end()
動作します。
map::count
として実装されていfind(__x) == end() ? 0 : 1;
ます。以下のためにmultimap
パフォーマンスの引数を持っているかもしれないが、それはOPの質問ではないと私はまだ優雅さを好みます。
has(k)
/を追加するだけcontains(k)
です。貧弱なインターフェース設計。find()アプローチは冗長すぎて、このcount(k)
アプローチはと意味的に同等ではありませんhas(k)
。その点ではどちらもありませんfind(k)
。この質問の視聴回数を確認してください。
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
}
value
挿入が不要な場合、の計算がスキップされることです。
lower_bound
ベースのソリューションはやりすぎです。私は「完全を期すために」私の答えにちょっと触れました。私が言ったように、あなたは完全に十分です。:-)
insert
アプリオリの代替案との関係を指摘するだけです。実際にはmultimap
、lower_bound
メソッドを使用すると同等の範囲の先頭に挿入されるのに対し、プレーンinsert
メソッドは範囲の末尾に追加されるのとは別の違いがあります。
あなたのdesideratumはmap.contains(key)
、ドラフト標準C ++ 2aでスケジュールされています。2017年には、gcc 9.2によって実装されました。現在のclangにもあります。