unordered_map是基于哈希表的c++关联容器,提供O(1)平均时间复杂度的查找、插入和删除操作,适用于无需排序的快速访问场景。

unordered_map 是 C++ STL 中提供的关联容器,用于存储键值对(key-value pairs),其底层基于哈希表实现,查找、插入和删除操作的平均时间复杂度为 O(1)。相比 map(基于红黑树,有序),unordered_map 无序但访问更快,适合需要快速查找的场景。
包含头文件与命名空间
使用 unordered_map 需要包含头文件 <unordered_map>,并使用 std 命名空间:
#include <iostream>
#include <unordered_map>
#include <String>
using Namespace std;
基本定义与初始化
声明一个 unordered_map 的格式为:
unordered_map<Key_Type, Value_Type> map_name;
常见用法示例:
立即学习“C++免费学习笔记(深入)”;
unordered_map<string, int> ageMap; // 键为字符串,值为整数
支持的初始化方式:
- 空初始化:直接定义后插入数据
- 列表初始化:unordered_map<string, int> ages = {{“Alice”, 25}, {“Bob”, 30}};
常用操作方法
以下是一些核心操作及对应函数:
- 插入元素:
- ageMap[“Charlie”] = 35; // 使用下标插入或更新
- ageMap.insert({“David”, 40}); // insert 方法插入 pair
- ageMap.emplace(“Eve”, 28); // 原地构造,效率更高
- 查找元素:
- 访问元素:
- cout << ageMap[“Alice”]; // 直接通过键访问值(若键不存在会自动创建)
- 更安全的方式是先 find 再访问,避免意外插入默认值
- 删除元素:
- ageMap.erase(“Bob”); // 按键删除
- ageMap.erase(it); // 按迭代器删除
- 遍历所有元素: for (const auto& pair : ageMap) {
cout << pair.first << “: ” << pair.second << endl;
} - 获取大小与清空:
- ageMap.size(); // 元素个数
- ageMap.empty(); // 是否为空
- ageMap.clear(); // 清空所有元素
完整示例代码
下面是一个完整的小程序演示 unordered_map 的典型用法:
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
int main() {
unordered_map<string, int> studentAges = {
{“Alice”, 20},
{“Bob”, 22},
{“Charlie”, 19}
};
// 插入新元素
studentAges[“David”] = 21;
// 查找并输出 Bob 的年龄
auto it = studentAges.find(“Bob”);
if (it != studentAges.end()) {
cout << “Bob’s age: ” << it->second << endl;
}
// 遍历输出所有学生信息
for (const auto& s : studentAges) {
cout << s.first << ” – ” << s.second << ” years old” << endl;
}
return 0;
}


