我有一些教材提到STL最初没有包含哈希容器,但大多数也说,由于这是一个已知的缺陷,大多数标准库实现都有某种形式的哈希容器。
这些书籍可能不是最新的,当我在谷歌搜索时,我有点困惑什么才是真正的“标准”,所以:
目前,大多数标准库实现是否提供了相对一致的哈希容器?如果是,它是否被视为STL的一部分?
这个容器的“标准”头文件是什么?(我猜是#include <hash>
,但以防万一!)。
是否单独定义了哈希集和哈希映射用于使用?
我有一些教材提到STL最初没有包含哈希容器,但大多数也说,由于这是一个已知的缺陷,大多数标准库实现都有某种形式的哈希容器。
这些书籍可能不是最新的,当我在谷歌搜索时,我有点困惑什么才是真正的“标准”,所以:
目前,大多数标准库实现是否提供了相对一致的哈希容器?如果是,它是否被视为STL的一部分?
这个容器的“标准”头文件是什么?(我猜是#include <hash>
,但以防万一!)。
是否单独定义了哈希集和哈希映射用于使用?
unordered_map
,您可以通过#include <unordered_map>
将其包含在文件中。它是现在已经得到批准的标准C++11的一部分。hash_map
,这些东西被一些供应商(广泛?)支持,因此您可以使用它们,但如果这样做,您的代码不是真正可移植的,因为hash_map
不是标准的一部分。hash_map
和所有其他供应商特定版本的哈希表结构现在不应该使用。boost::unordered_map
等,它们是当前标准的实验场所,因此提供了一个简单的过渡。 - Matthieu M.查看C++11类型:
unordered_map
(无序映射表)unordered_set
(无序集合)unordered_multimap
(多重映射表)unordered_multiset
(多重集合)目前的标准(03)中没有,您可以使用boost::unordered_map
。在新的标准中,将会有std::unordered_map
。
新的C++11标准具有哈希等效容器。目前大多数实现中还没有它们,但它们已经在标准库的TR1扩展中提供了一些实现。
TR1命名空间中有一些哈希容器。例如,可以在此处查看简短介绍:http://drdobbs.com/184402066