在 C++ 标准模板库(STL)中,unordered_multimap 是一个非常实用的关联容器,特别适用于需要存储多个相同键(key)对应不同值(value)的场景。本教程将从零开始,手把手教你掌握 C++ unordered_multimap 的基本用法、常见操作以及实际应用场景,即使你是编程小白,也能轻松上手!

unordered_multimap 是 C++11 引入的一种基于哈希表(hash table)实现的关联容器。它与 unordered_map 类似,但关键区别在于:允许同一个键(key)对应多个值(value)。这意味着你可以插入多个具有相同 key 的键值对,而不会覆盖已有数据。
由于底层使用哈希表,unordered_multimap 的平均查找、插入和删除操作的时间复杂度为 O(1),非常适合需要高效访问大量数据的场景。
首先,你需要包含头文件 <unordered_map>:
#include <iostream>#include <unordered_map>using namespace std;声明一个 unordered_multimap 非常简单,只需指定键和值的类型:
// 声明一个 key 为 string,value 为 int 的 unordered_multimapunordered_multimap<string, int> scores;可以使用 insert() 方法或 emplace() 方法插入键值对:
scores.insert({"Alice", 95});scores.insert({"Bob", 88});scores.insert({"Alice", 92}); // 允许重复 key!scores.emplace("Charlie", 78);由于一个 key 可能对应多个 value,我们通常使用 equal_range() 来获取所有匹配的元素:
auto range = scores.equal_range("Alice");for (auto it = range.first; it != range.second; ++it) { cout << "Key: " << it->first << ", Value: " << it->second << endl;}你也可以使用范围 for 循环遍历整个容器(注意:顺序是无序的!):
for (const auto& pair : scores) { cout << pair.first << " -> " << pair.second << endl;}可以按迭代器删除,也可以按 key 删除所有匹配项:
// 删除所有 key 为 "Alice" 的元素scores.erase("Alice");map:map 基于红黑树,元素有序,但插入/查找为 O(log n);unordered_multimap 无序但平均 O(1)。unordered_map:unordered_map 不允许重复 key;unordered_multimap 允许多个相同 key。当你需要以下功能时,unordered_multimap 是理想选择:
unordered_multimap 是 C++ 中处理“一对多”映射关系的强大工具。作为 C++哈希表 家族的一员,它结合了哈希表的高效性和多值映射的灵活性。通过本教程,你应该已经掌握了它的基本用法,并能将其应用到实际项目中。
记住关键词:C++ unordered_multimap、C++哈希表、C++关联容器 和 C++多值映射,它们是你深入学习 STL 的重要基础!
本文由主机测评网于2025-12-26发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251212964.html