有效地检查映射 c++ 中是否存在元素
Efficiently check element exists in map c++
我知道.find((方法来检查映射中是否存在元素。但是假设我有一个地图 - 地图 - 包含大约2000个元素,我想在列表中添加一个元素。我首先必须检查该元素是否存在。使用 .find(( 是不是效率低下,因为迭代器必须"迭代"映射中的元素?是否有更有效、更省时的方法来检查地图中是否存在元素?
std::map
具有对数查找复杂性,因此您不必访问所有元素来确定元素是否在地图中。
另一方面,您可以使用std::map::emplace
或std::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
与密钥一起使用,然后使用返回的迭代器之一作为插入的提示。
相关文章:
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 如何检查QList中是否存在值
- 根据某个函数是否存在启用模板
- 地图计数确实很重要,或者只是检查是否存在
- C++中是否存在 std::conditional 的懒惰等价物?
- 无论如何,我可以确定构造函数是否存在吗?
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 堆分配的对象是否存在永不为空的唯一所有者?
- 扩展类中的可选 vir 函数,测试它在运行时是否存在
- 模板化检查是否存在带有参数列表的类成员函数?
- 是否存在包含负号的isdigit函数(过载)
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 检查编译时是否存在静态函数
- 向量是否存在行主要形式?
- 检查 TinyXML 中的元素是否存在
- 检测是否存在具有 C++17 的类成员
- 虚拟继承中是否存在多重继承?
- 我遇到了这个代码片段,不明白. 它递归检查 C++ 字符串中是否存在大写字符
- std::weak_ptr 和相应的 std::shared_ptr 之间是否存在数据竞争?
- 是否存在用于 C 或 C++ 中常见数学运算(例如最小值、最大值和平均值)的可导入库?