std :: hash_set vs std :: unordered_set,它们是一样的吗?

uni*_*n83 16 c++ optimization hash stl hashset

我知道hash_set是非标准的,unordered_set是标准的.但是,我很纳闷,表现明智,这两者有什么区别?为什么它们分开存在?

Ker*_* SB 23

unordered_C++标准规定的容器的复杂性要求基本上没有为实现留下太多空间,实现必须是某种哈希表.该标准的编写充分意识到大多数供应商已将这些数据结构部署为扩展.

编译器供应商通常会将这些容器称为"哈希映射"或"哈希集",这可能是您所指的(std::hash_set标准中没有文字,但我认为GCC中有一个在单独的命名空间中,并且类似于其他编译器).

在编写新标准时,作者希望避免与现有扩展库混淆,因此他们选择了一个反映典型C++思维模式的名称:说出它是什么,而不是它是如何实现的.无序容器是无序的.这意味着与订购的容器相比,您获得的更少,但这种减少的实用程序为您提供了更高效的访问.

实现方式,hash_set,Boost-unordered,TR1-unordered和C++ 11-unordered将非常相似,如果不相同的话.