c++ - 一个哈希集可以找到 O(1) 的最小或最大元素?

标签 c++ stl hashmap hashtable hashset

我需要很好地理解哈希集的架构和功能。

与STL::set相比,hash set与STL::set相比有什么优势?我认为 O(1) 时间进行搜索。如果这是真的,为什么不使用哈希表呢?他们的区别是重复元素?还是其他人?

对于STL::set来说,smallest/largest的查找时间也是O(1),因为已经排序了。

哈希集不是二叉搜索树,如何用 O(1) 找到最小或最大的元素?

阅读后 What is the difference between set and hashset in C++ STL?

我找不到答案。

我的想法:

什么时候应该使用哈希集而不是哈希表?

STL::set 是有序集。因此,获得最小/最大元素的时间复杂度为 O(1)。

如果是哈希集呢?它是有序的?

谢谢

最佳答案

A hash set is not a binary search tree, how to find the smallest or largest element with O(1)?

这正是关键区别之一:您无法在常数时间内找到散列集中的最小/最大元素。当然,您可以通过扫描整个集合在 O(n) 时间内完成。

另一个关键区别是遍历哈希集不会按排序顺序返回元素。

关于c++ - 一个哈希集可以找到 O(1) 的最小或最大元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8638280/

相关文章:

c++ - 通过引用传递 r 值?

c++ - 将内联加速 void a(string b) { cout << b; }

c++ - 无法理解如何将新对象添加到 std::list<std::unique_ptr<classname>>

c++ - std::map 和性能,相交集

java - Java中HashMap的内部实现

c++ - QGridLayout 没有按预期工作

python - 使用 Python 调用 DLL 函数时出现 ctypes.ArgumentError

c++ - 获取类似 STL 的嵌套容器中的元素总数

java - 复制列表而不将其多次链接到原始列表! java

java - 从方法返回数组以从 HashMap 中获取对象 - java