有标准的C ++哈希容器吗?

时间:2011-08-24 13:24:32

标签: c++ stl containers standard-library

我有各种各样的教科书注意到最初没有一个哈希容器被整合到STL中,但是大多数人还说大多数标准库实现都有某种形式的哈希容器,因为它是已知的缺陷。

这些书不一定是最新的,我对google搜索时真正“标准”的内容感到有些困惑,所以:

此时,大多数标准库实现是否提供了相当一致的哈希容器,如果是,它是否被认为是STL的一部分?

这个容器的“标准”标题是什么? (我猜它是#include <hash>,但以防万一!)。

是否有单独定义的哈希集和哈希映射?

5 个答案:

答案 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