导入
概览
无序关联容器与有序关联容器的主要区别在于键的排序概念。让我们了解一下无序容器是如何处理键的。
...
随着 C++11 标准的引入,C++ 提供了四种无序关联容器:std::unordered_map、std::unordered_multimap、std::unordered_set 和 std::unordered_multiset。它们与对应的有序关联容器(如 std::map 等)有许多相似之处,但不同之处在于,无序容器具有更丰富的接口,并且其键值不进行排序。
以下是 std::unordered_map 的声明示例:
1template< class key, class val, class Hash= std::hash<key>, 2 class KeyEqual= std::equal_to<key>, 3 class Alloc= std::allocator<std::pair<const key, val>>> 4class unordered_map;
与 std::map 类似,std::unordered_map 也包含一个分配器,但它不需要比较函数。相反,std::unordered_map 需要两个额外的函数:一个是用于计算键的哈希值:std::hash<key>;另一个是用于判断键是否相等:std::equal_to<key>。由于这三个模板参数都有默认值,我们只需指定键类型和值类型即可。例如,声明一个 std::unordered_map 可以写作 std::unordered_map<char, int> unordMap。
在下一课中,我们将讨论键和值的特性。