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

我发现检查重复的唯一方法是通过插入和检查std::pair.secondfalse ,但问题是,这仍然插入的东西,如果密钥是未使用的,而我想要的是一个map.contains(key); function。

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

或者my_map.find( key ) != my_map.end()也可以。

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 }