导入
概述
无序关联容器与有序关联容器的主要区别在于键是否排序。让我们来看看无序容器是如何处理键的。
随着C++11标准的引入,C++新增了四种无序关联容器:std::unordered_map、std::unordered_multimap、std::unordered_set 和 std::unordered_multiset。它们与对应的有序关联容器有很多相似之处。不同之处在于,这些无序容器提供了更丰富的接口,且其键值不进行排序。
以下是 std::unordered_map 的声明形式:
1template< class Key, class T, class Hash = std::hash<Key>, 2 class KeyEqual = std::equal_to<Key>, 3 class Alloc = std::allocator<std::pair<const Key, T>>> 4class unordered_map;
与 std::map 类似,std::unordered_map 也支持分配器(allocator),但它不需要比较函数。相反,它需要两个额外的函数:一是用于计算键的哈希值,即 std::hash<Key>;二是用于判断键是否相等,即 std::equal_to<Key>。由于这三个模板参数都有默认值,因此在大多数情况下,你只需指定键和值的类型即可,例如:std::unordered_map<char, int> unordMap。