我需要很好地理解哈希集的体系结构和功能。
与STL :: set相比,哈希集与STL :: set相比有什么优势?我认为O(1)时间做搜索。如果这是真的,为什么不使用哈希表呢?他们的区别是重复元素?或其他人?
对于STL :: set,最小/最大的搜索时间也是O(1),因为它已经被排序。
哈希集不是二叉搜索树,如何用O(1)找到最小或最大的元素?
看完之后 What is the difference between set and hashset in C++ STL?
我找不到答案。
我的想法:
何时应该使用哈希集而不是哈希表?
STL :: set是有序集。因此,获得最小/最大元素是O(1)。
如果哈希集怎么办?订购?
感谢
答案 0 :(得分:3)
哈希集不是二叉搜索树,如何用O(1)找到最小或最大的元素?
这正是关键区别之一:您无法在常量时间内找到哈希集中的最小/最大元素。当然,您可以通过扫描整个集合在O(n)
时间内完成此操作。
另一个关键区别是迭代哈希集不会按排序顺序返回元素。
答案 1 :(得分:0)
哈希集基本上是没有存储值(仅键)的哈希表,而C ++中的std::set
实现为平衡二进制搜索树。
您应该阅读一些算法/计算机科学书籍中的差异,因为您似乎有一些基本的误解,例如,在二叉搜索树中,找到最小/最大元素的成本是对数O(log N)
,不是常数O(1)
。
根据您最常需要执行的操作,数据结构将更合适。如果你需要经常找到最小的元素,那么std::set
将在O(log N)
中执行操作,但是使用哈希表你需要检查所有元素,这意味着线性时间{{1} }。另一方面,如果操作不常见且常规查找(集合中的元素a)更常见,则哈希集的常量时间查找将优于集合中的O(N)
查找。