c++ - C++ 中的 unordered_set 会在恒定时间内找到该数据中的值吗?

标签 c++ traveling-salesman

假设我有一个图中的顶点列表。该列表对应于图中的路径,在添加另一个顶点之前,我需要检查它是否已存在于路径中。

我正在考虑将所有顶点添加到无序集中,然后使用查找函数。该文档指出,它在平均情况下以恒定时间运行。在这种情况下它仍然会以恒定的时间运行吗?

如果没有,有没有办法存储顶点列表并在恒定时间内查找列表中是否存在顶点?

最佳答案

无论您在其中存储什么数据,std::unordered_set 类型都期望进行 O(1) 次查找,所以是的,在这种情况下,您应该期望看到查找花费 O(1) 时间.

一个可能的警告:这里的 O(1) 指的是相等比较和计算的哈希值的数量。如果比较两个节点是否相等需要不同的时间,或者如果您的哈希函数需要不同的时间,那么总成本可能会超过 O(1)。

另一个可能的警告:预期的 O(1) 运行时间假设您有一个“好的”哈希函数。如果您编写了自己的自定义哈希函数并且它是一个“弱”哈希函数,那么由于哈希冲突,运行时间可能会超过 O(1)。

关于c++ - C++ 中的 unordered_set 会在恒定时间内找到该数据中的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71411946/

相关文章:

c++ - 在 unordered_set 中存储多态对象

c# - 有时间限制的旅行推销员

javascript - 异步旅行推销员子旅行的本地搜索启发式

c++ - 旅行商的多片段启发式(C++)

algorithm - 如何确定旅行商问题的起点和终点?

c++ - 类中的指针私有(private)属性,其中此类在 vector 中使用,生成错误双重释放或损坏

c++ - 使用查找表选择具有运行时索引的可变参数类型

c++ - 没有默认标签的 Switch-Case 中的无效值

c++ - 使用 Cloaking 模式时需要虚拟析构函数吗?

algorithm - 附加偏序的旅行商问题