我有各种各样的教科书注意到最初没有一个哈希容器被整合到STL中,但是大多数人还说大多数标准库实现都有某种形式的哈希容器,因为它是已知的缺陷。
这些书不一定是最新的,我对google搜索时真正“标准”的内容感到有些困惑,所以:
此时,大多数标准库实现是否提供了相当一致的哈希容器,如果是,它是否被认为是STL的一部分?
这个容器的“标准”标题是什么? (我猜它是#include <hash>
,但以防万一!)。
是否有单独定义的哈希集和哈希映射?
答案 0 :(得分:10)
新标准哈希映射容器名为unordered_map
。您可以#include <unordered_map>
将其包含在您的文件中。它是现已批准的标准C ++ 11的一部分。
在C ++ 11之前,你有各种各样的东西,如hash_map
,这些东西(广泛地?)得到了一些供应商的支持,所以你可以使用它们,但是如果你这样做了,你的代码就不是真正可移植的,因为{{ 1}}不是标准的一部分。 <{1}}和哈希表结构的所有其他供应商特定版本现在都不应该使用。
答案 1 :(得分:6)
参见C ++ 11类型:
unordered_map
unordered_set
unordered_multimap
unordered_multiset
答案 2 :(得分:2)
不在当前标准(03)中,您可以使用boost::unordered_map
。在新标准中,将有std::unordered_map
。
答案 3 :(得分:1)
新的C ++ 11标准具有哈希等效容器。它们目前不在大多数实现中,但是它们已经在标准库的TR1扩展中提供了一些实现。
答案 4 :(得分:1)
TR1名称空间中有一些哈希容器。例如,请参阅此处的简短介绍:http://drdobbs.com/184402066