如何检查 std: : map 是否包含一个键而不执行插入?

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

207194 次浏览

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

交替 my_map.find( key ) != my_map.end()也可以工作。

土豆水的答案是正确的,但我更喜欢使用 findlower_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
}

您所需要的 map.contains(key)是按照标准 C + + 2a草案安排的,并且是用 C + + 20实现的。2017年由 Gcc 9.2实施。也在 里。