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

5

我有一些教材提到STL最初没有包含哈希容器,但大多数也说,由于这是一个已知的缺陷,大多数标准库实现都有某种形式的哈希容器。

这些书籍可能不是最新的,当我在谷歌搜索时,我有点困惑什么才是真正的“标准”,所以:

目前,大多数标准库实现是否提供了相对一致的哈希容器?如果是,它是否被视为STL的一部分?

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

是否单独定义了哈希集和哈希映射用于使用?


参见:https://dev59.com/OG035IYBdhLWcg3wC7mf - Mateen Ulhaq
5个回答

10
新的标准哈希表容器被称为unordered_map,您可以通过#include <unordered_map>将其包含在文件中。它是现在已经得到批准的标准C++11的一部分。
在C++11之前,您有各种东西,如hash_map,这些东西被一些供应商(广泛?)支持,因此您可以使用它们,但如果这样做,您的代码不是真正可移植的,因为hash_map不是标准的一部分。hash_map和所有其他供应商特定版本的哈希表结构现在不应该使用。

1
不要忘记准标准的 boost::unordered_map 等,它们是当前标准的实验场所,因此提供了一个简单的过渡。 - Matthieu M.

6

查看C++11类型:

  • unordered_map(无序映射表)
  • unordered_set(无序集合)
  • unordered_multimap(多重映射表)
  • unordered_multiset(多重集合)

1
对于非C++11编译器用户,它们的boost替代函数。 - RedX

2

目前的标准(03)中没有,您可以使用boost::unordered_map。在新的标准中,将会有std::unordered_map


1

新的C++11标准具有哈希等效容器。目前大多数实现中还没有它们,但它们已经在标准库的TR1扩展中提供了一些实现。


1

tr1命名空间已经过时。随着C++0x标准版本的实际到来,几乎所有内容都从tr1转移到了std。 - Martin York
我认为C++0x仍然处于草案阶段,是吗? - Anton Daneyko
是的,标准仍处于草案阶段,但所有好的编译器已经将一些内容从tr1移出到std(使用适当的标志)。 - Martin York

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接