[英]How to check if std::map contains a key without doing insert?
我發現檢查重復項的唯一方法是插入並檢查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
}
我知道這個問題已經有了一些好的答案,但是我認為我的解決方案值得分享。
它適用於std::map
和std::vector<std::pair<T, U>>
,可從C ++ 11獲得。
template <typename ForwardIterator, typename Key>
bool contains_key(ForwardIterator first, ForwardIterator last, Key const key) {
using ValueType = typename std::iterator_traits<ForwardIterator>::value_type;
auto search_result = std::find_if(
first, last,
[&key](ValueType const& item) {
return item.first == key;
}
);
if (search_result == last) {
return false;
} else {
return true;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.