map 容器对比

容器类型 底层结构 是否有序 是否唯一 key 平均操作复杂度 是否支持排序操作
unordered_map 哈希表 ❌ 无序 ✅ 是 ✅ O(1) ❌ 否
map 红黑树 ✅ 有序 ✅ 是 ⏱️ O(log n) ✅ 是
unordered_multimap 哈希表 ❌ 无序 ❌ 否(可重复) ✅ O(1) ❌ 否
multimap 红黑树 ✅ 有序 ❌ 否(可重复) ⏱️ O(log n) ✅ 是

unordered_map

定义

#include <unordered_map>
std::unordered_map<key_type, value_type> map_name;

特点

特性 说明
唯一键值 每个 key 是唯一的,如果插入重复 key 会被忽略(或覆盖)
无序存储 元素不是按插入顺序键值顺序排列,顺序不可预测
哈希表实现 底层使用 哈希表(hash table) 实现,提供快速查找
键-值对存储 类型为 std::unordered_map<Key, Value>,支持自定义类型
平均 O(1) 操作 查找、插入、删除等操作在平均情况下是常数时间
不支持排序操作 不支持按键或值排序(如 lower_bound, upper_bound
线程不安全 多线程访问时需要手动加锁保护容器(除非使用并发 map)

初始化操作

unordered_map支持三种初始化操作

  1. 指定key和value的类型构造一个空容器

    unordered_map<int, double> um; //构造一个key为int类型,value为double类型的空容器
    
  2. 拷贝构造某同类型容器的复制品

    unordered_map<int, double> um1(um); //拷贝构造同类型容器um1的复制品
    
  3. 使用迭代器拷贝构造某一段内容

    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 获取容器中最后一个元素下一个位置的正向迭代器

insert 插入操作