回答:
を使用し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にもあります。