C++——unordered_map
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&#x