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::count
olarak uygulanır find(__x) == end() ? 0 : 1;
. Çünkü multimap
bir 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 find
veya lower_bound
onun 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
}
value
ekleme işleminin gereksiz olması durumunda hesaplamanın atlanabilmesidir.
lower_bound
temelli bir çözüm aşırı derecede. Az önce "bütünlük için" cevabımdan bahsettim; Dediğim gibi seninki yeterli. :-)
insert
a priori alternatifi ile olan ilişkisine dikkat çekmek . Aslında, bir kullanan başka bir fark vardır multimap
, lower_bound
düz ise eşdeğer aralığının başlangıcında yöntem uçlar insert
yö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 .