| 容器类型 | 底层结构 | 是否有序 | 是否唯一 key | 平均操作复杂度 | 是否支持排序操作 |
|---|---|---|---|---|---|
unordered_map |
哈希表 | ❌ 无序 | ✅ 是 | ✅ O(1) | ❌ 否 |
map |
红黑树 | ✅ 有序 | ✅ 是 | ⏱️ O(log n) | ✅ 是 |
unordered_multimap |
哈希表 | ❌ 无序 | ❌ 否(可重复) | ✅ O(1) | ❌ 否 |
multimap |
红黑树 | ✅ 有序 | ❌ 否(可重复) | ⏱️ O(log n) | ✅ 是 |
#include <unordered_map>
std::unordered_map<key_type, value_type> map_name;
key_type 是键的类型。value_type 是值的类型。| 特性 | 说明 |
|---|---|
| 唯一键值 | 每个 key 是唯一的,如果插入重复 key 会被忽略(或覆盖) |
| 无序存储 | 元素不是按插入顺序或键值顺序排列,顺序不可预测 |
| 哈希表实现 | 底层使用 哈希表(hash table) 实现,提供快速查找 |
| 键-值对存储 | 类型为 std::unordered_map<Key, Value>,支持自定义类型 |
| 平均 O(1) 操作 | 查找、插入、删除等操作在平均情况下是常数时间 |
| 不支持排序操作 | 不支持按键或值排序(如 lower_bound, upper_bound) |
| 线程不安全 | 多线程访问时需要手动加锁保护容器(除非使用并发 map) |
unordered_map支持三种初始化操作
指定key和value的类型构造一个空容器
unordered_map<int, double> um; //构造一个key为int类型,value为double类型的空容器
拷贝构造某同类型容器的复制品
unordered_map<int, double> um1(um); //拷贝构造同类型容器um1的复制品
使用迭代器拷贝构造某一段内容
unordered_map<int, double> um2(um1.begin(), um1.end()); //使用迭代器拷贝构造um1容器某段区间的复制品
unordered_map<int, std::string> anotherMap = um;// 构造并复制另一个 unordered_map
unordered_map初始化时可以设置初始容量
// 构造并指定初始容量
unordered_map<int, std::string> umap(10);
| 成员函数 | 功能 |
|---|---|
insert |
插入键值对 |
erase |
删除指定key值的键值对 |
find |
查找指定key值的键值对 |
size |
获取容器中元素的个数 |
empty |
判断容器是否为空 |
clear |
清空容器 |
swap |
交换两个容器中的数据 |
count |
获取容器中指定key值的元素个数 |
| 成员函数 | 功能 |
|---|---|
| begin | 获取容器中第一个元素的正向迭代器 |
| end | 获取容器中最后一个元素下一个位置的正向迭代器 |