跳转到主内容
极星编程网:以代码为星,赴技术山海!

c++怎么使用unordered_map_c++中unordered_map的用法与示例解析

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

unordered_map是 C++ STL 中提供的关联容器,用于存储键值对(key-value pairs),其底层基于哈希表实现,查找、插入和删除操作的平均时间复杂度为 O(1)。相比map(基于红黑树,有序),unordered_map无序但访问更快,适合需要快速查找的场景。

包含头文件与命名空间使用 unordered_map 需要包含头文件,并使用 std 命名空间:#include #include #include using namespace std;基本定义与初始化声明一个 unordered_map 的格式为:unordered_map map_name;

常见用法示例:

立即学习“C++免费学习笔记(深入)

”;

C函数速查手册(CHM版)

C函数速查手册(CHM版)

下载unordered_map ageMap; // 键为字符串,值为整数

支持的初始化方式:

空初始化:直接定义后插入数据

列表初始化:

unordered_map ages = {{"Alice", 25}, {"Bob", 30}};常用操作方法以下是一些核心操作及对应函数:插入元素:ageMap["Charlie"] = 35;// 使用下标插入或更新ageMap.insert({"David", 40});// insert 方法插入 pair ageMap.emplace("Eve", 28);// 原地构造,效率更高查找元素:auto it = ageMap.find("Alice");// 返回迭代器,找不到返回 end()

判断是否存在:

if (ageMap.count("Bob")) { /* 存在 */ }访问元素: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 #include #include using namespace std;int main() {unordered_map 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;}注意事项键类型必须支持哈希函数。C++ 内置类型(如 int、string)已提供 hash 实现,自定义类型需重载 hash 函数或提供仿函数。

不保证元素顺序,遍历时顺序可能每次不同。

使用下标访问不存在的键会自动插入该键并用默认值初始化(如 int 为 0),需注意逻辑错误。

多线程环境下需自行加锁保护,unordered_map 本身非线程安全。

基本上就这些。掌握 unordered_map 能显著提升查找效率,是算法题和工程开发中的常用工具。

相关文章