C++容器——unordered_map浅谈

实现原理 

unordered_map 在 C++ 标准库中的实现基于哈希表(Hash Table)数据结构。哈希表通过一个哈希函数将键转换为数组的索引,然后在对应的桶(buckets)中存储元素。当多个键映射到相同的哈希值时,通常采用链地址法解决冲突,即在每个桶内使用链表存储多个元素。

常用操作

#include <unordered_map>
using namespace std;

// 创建一个空的 unordered_map,键值类型为 string,值类型为 int
unordered_map<string, int> myMap;

// 插入元素
myMap["apple"] = 10; // 直接插入
myMap.insert({"banana", 20}); // 使用 insert 函数插入
// 查找元素
if (myMap.find("apple") != myMap.end()) {
    cout << "apple's value: " << myMap["apple"] << endl;
}

// 更新元素
myMap["apple"] = 30; // 直接更新

// 删除元素
myMap.erase("apple");

// 遍历 unordered_map
for (const auto &pair : myMap) {
    cout << pair.first << ": " << pair.second << endl;
}

特性及应用

  • 无序性unordered_map 中的元素顺序是不确定的,不保证按照任何特定的顺序排列。
  • 唯一键:键必须是唯一的,尝试插入具有相同键的元素不会更改已有元素的值,而是直接忽略该插入操作。
  • 高效查找:平均情况下,插入、删除和查找操作的时间复杂度都是 O(1),取决于哈希函数的质量以及负载因子(bucket 数量与实际元素数量的比例)。
  • 应用:常用于需要快速根据键查找值的场景,例如缓存、词频统计等。

相关容器及区别

  • map:C++ 标准库中的另一种关联容器,同样以键值对的形式存储元素,但其底层实现是红黑树,因此它保持了键的排序顺序,查找、插入和删除操作的平均时间复杂度为 O(log n)。

  • unordered_multimap:类似于 unordered_map 的变体,允许键有重复,并且对应多个值。而在 unordered_map 中,每个键都只能对应一个值。

总结来说,unordered_map 是一个高效的无序键值对容器,适合于不需要维持键的顺序且重视查找速度的应用场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值