std::unordered_map 是 C++ 标准库中的一个关联容器,用于存储键值对。它基于哈希表实现,提供了快速查找、插入和删除操作的能力。
一、unordered_map的特点
1. 无序存储:std::unordered_map 中的元素是无序的,即不会按任何特定顺序排列。这是因为它使用哈希表作为底层数据结构,元素的存储位置由其键的哈希值决定。
2. 快速查找:std::unordered_map 提供了平均情况下的常数级查找时间复杂度(O(1)),但在最坏情况下可能退化为线性级(O(n)),特别是在哈希冲突严重的情况下。这使得std::unordered_map 非常适合需要快速查找键值对的应用场景。
3. 键的唯一性:std::unordered_map 中不允许重复的键。如果试图插入一个已存在的键,则会更新该键对应的值。
4. 键值对的存储:每个元素都是一个键值对,形式为 (key, value)。
二、内部实现
1. 哈希函数:用于计算键的哈希值,std::unordered_map 默认使用 std::hash<Key> 来计算键的哈希值。用户也可以提供自定义的哈希函数。
2. 等价函数:用于判断两个键是否相等,std::unordered_map 默认使用 std::equal_to<Key> 来比较键。用户也可以提供自定义的等价函数。
3. 桶的数量:哈希表由多个“桶”(bucket)组成,每个桶可以包含一个或多个键值对。std::unordered_map 会根据元素数量动态调整桶的数量,以减少哈希冲突。
4. 负载因子:负载因子(load factor)是指哈希表中元素的数量除以桶的数量。std::unordered_map 有一个最大负载因子,当实际负载因子超过这个值时,哈希表会重新分配更大的桶数量。
三、unordered_map的使用方法
它的适用方法和map容器的适用方法基本一致。
代码示例:
#include