C++11 理解 (二十一) 之 散列表

在过去,不断有要求想将散列表(无序关系式容器)引进标准库。只因为时间上的限制,散列表才没有被标准库所采纳。虽然,散列表在最糟情况下(如果出现许多冲突 (collision) 的话)在性能上比不过平衡树。但实际运用上,散列表的表现则较佳。

因为标准委员会还看不到有任何机会能将开放寻址法标准化,所以目前冲突仅能通过链地址法 (linear chaining) 的方式处理。为避免与第三方库发展的散列表发生名称上的冲突,前缀将采用 unordered 而非 hash。

库将引进四种散列表,其中差别在于底下两个特性: 是否接受具相同键值的项目 (Equivalent keys),以及是否会将键值映射到相对应的数据 (Associated values)。

散列表类型 有无关系值 接受相同键值
std::unordered_set
std::unordered_multiset
std::unordered_map
std::unordered_multimap

上述的类型将满足对一个容器类型的要求,同时也提供访问其中元素的成员函数: inserterasebeginend

散列表不需要对现有核心语言做扩展(虽然散列表的实现会利用到 C++11 新的语言特性),只会对头文件 <functional> 做些许扩展,并引入 <unordered_set> 和<unordered_map> 两个头文件。对于其它现有的类型不会有任何修改。同时,散列表也不会依赖其它标准库的扩展功能。

你可能感兴趣的:(C++11 理解 (二十一) 之 散列表)