如何检查std :: map是否包含一个没有插入的键?

时间:2010-10-07 23:13:21

标签: c++ stl map

我发现检查重复项的唯一方法是插入并检查std::pair.second false,但问题是如果密钥未使用,这仍会插入一些内容,而我想要的是是map.contains(key);函数。

3 个答案:

答案 0 :(得分:273)

使用my_map.count( key );它只能返回0或1,这实际上是你想要的布尔结果。

另外my_map.find( key ) != my_map.end()也可以。

答案 1 :(得分:46)

Potatoswatter的回答没问题,但我更倾向于使用findlower_boundlower_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
}

答案 2 :(得分:2)

您的需求map.contains(key)已安排用于标准草案C++2a。在2017年,它由gcc 9.2实施。它也在当前的clang中。