有效地检查映射 c++ 中是否存在元素

Efficiently check element exists in map c++

本文关键字:是否 存在 元素 c++ 检查 映射 有效地      更新时间:2023-10-16

我知道.find((方法来检查映射中是否存在元素。但是假设我有一个地图 - 地图 - 包含大约2000个元素,我想在列表中添加一个元素。我首先必须检查该元素是否存在。使用 .find(( 是不是效率低下,因为迭代器必须"迭代"映射中的元素?是否有更有效、更省时的方法来检查地图中是否存在元素?

std::map具有对数查找复杂性,因此您不必访问所有元素来确定元素是否在地图中。

另一方面,您可以使用std::map::emplacestd::map::insert使查找和插入操作更加简洁:

auto [iter, ok] = the_map.emplace(the_key, a_value);
if (ok) {
  // element was not in map so got inserted
}

这假设a_value已经存在,或者即使最终没有插入到地图中,构建它也不是问题。

如果你真的需要使用"查找和插入"习惯用法(这可能是因为你在任何情况下都不能为同一个键构造两次值对象(,并且你担心两次对数复杂性,你必须使用std::map::equal_range

执行此操作的方法是首先将equal_range与密钥一起使用,然后使用返回的迭代器之一作为插入的提示。