Yanıtlar:
Kullanın my_map.count( key ); yalnızca 0 veya 1 değerini döndürebilir, bu da aslında istediğiniz Boole sonucudur.
Alternatif olarak da my_map.find( key ) != my_map.end()çalışır.
map::countolarak uygulanır find(__x) == end() ? 0 : 1;. Çünkü multimapbir performans argümanınız olabilir, ama bu OP'nin sorusu değil ve yine de zarafeti tercih ediyorum.
has(k)/ contains(k)gibi eklemelidir . Kötü arayüz tasarımı. Find () yaklaşımı çok ayrıntılıdır ve count(k)yaklaşım kesinlikle semantik eşitlikte değildir has(k). Çünkü bu da değil find(k). Bu sorudaki görünüm sayısına göz atın.
Potatoswatter cevabı tamam, ama kullanmayı tercih findveya lower_boundonun yerine. lower_boundözellikle yararlıdır, çünkü aynı anahtarla bir şeyler eklemek isterseniz, döndürülen yineleyici daha sonra ima edilen bir ekleme için kullanılabilir.
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
}
valueekleme işleminin gereksiz olması durumunda hesaplamanın atlanabilmesidir.
lower_boundtemelli bir çözüm aşırı derecede. Az önce "bütünlük için" cevabımdan bahsettim; Dediğim gibi seninki yeterli. :-)
inserta priori alternatifi ile olan ilişkisine dikkat çekmek . Aslında, bir kullanan başka bir fark vardır multimap, lower_bounddüz ise eşdeğer aralığının başlangıcında yöntem uçlar insertyöntem aralığının sonuna eklenir.
Desideratum,, map.contains(key)taslak standart C ++ 2a için planlanmıştır . 2017 yılında gcc 9.2 tarafından uygulanmıştır . Aynı zamanda şu anki argoda .