C++ unordered 系列关联式容器详解
在 C++98 标准中,STL 提供的关联式容器底层多基于红黑树,查询效率为 O(log N)。当数据量极大时,这种对数级比较开销可能成为瓶颈。C++11 引入了 unordered 系列容器,底层采用哈希表结构,将平均查找时间复杂度优化至 O(1),非常适合需要频繁快速检索的场景。
unordered_map:键值对的高效存储
unordered_map 存储 <key, value> 键值对,允许通过 key 快速索引到对应的 value。它的核心特点如下:
- 无序性:内部元素不排序,完全依赖哈希值分布。
- 快速访问:相同哈希值的键值对会被放入同一个桶(Bucket)中,实现常数级查找。
- 迭代器:至少支持前向迭代器。
- 操作符重载:实现了 operator[],可直接用 key 访问或插入 value。
这里有个细节需要注意:operator[] 在 key 不存在时会构造默认值并插入,存在则直接返回引用。因此,如果 key 已存在,count 函数的返回值最大为 1,因为 key 不可重复。
使用示例
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
void test_unordered_map() {
unordered_map<string, string> dict;
// 插入方式一:make_pair
dict.insert(make_pair("insert", "插入"));
dict.insert(make_pair("love", "爱"));
// 插入方式二:operator[] (若 key 不存在则创建)
dict["sort"] = "排序";
dict["miss"] = "想念、错过";
// 遍历输出
for (auto it = dict.begin(); it != dict.end(); ++it) {
cout << it->first << << it->second << endl;
}
}
{
();
;
}


