C++ STL中set和hashset有什么区别?

kal*_*kal 24 c++ performance stl set hashset

我什么时候应该选择其中一个?是否有任何指针建议您使用正确的STL容器?

Mar*_*som 33

hash_set是一个不属于C++标准的扩展.查找应该是O(1)而不是O(log n)set,因此在大多数情况下它会更快.

迭代容器时会看到另一个区别.set将按排序顺序发送内容,而hash_set基本上是随机的(感谢Lou Franco).

编辑:引入的C++标准的C++ 11更新unordered_set应该是首选而不是hash_set.性能将类似,并由标准保证.名称中的"无序"强调迭代它将产生没有特定顺序的结果.


Ale*_*lex 15

stl::set实现为二叉搜索树. hashset实现为哈希表.

这里的主要问题是许多人stl::set认为它是一个查找O(1)的哈希表,它不是,也没有.它确实有O(log(n))用于查找.然后阅读有关二进制树与哈希表的其他内容,以更好地了解数据结构.