繁体   English   中英

在地图c ++中有效地检查元素

[英]Efficiently check element exists in map c++

我知道.find()方法来检查地图中是否存在元素。 但假设我有一个map - map - 大约有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已经存在,或者构造它不是问题,即使它最终没有插入到地图中。

如果你真的需要使用'find and insert'idiom(这可能是因为你无法在任何情况下两次为同一个键构造一个值对象)并且你担心两次对数复杂性,你必须使用std::map::equal_range

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM