新闻中心
C++ multimap用法详解_C++允许重复key的字典容器操作
multimap允许键重复且自动排序,适用于一对多映射;通过insert插入元素,equal_range查找所有相同键值,erase删除元素,count统计键频次,常用于学生成绩等场景。

在C++中,multimap 是一个关联式容器,属于标准模板库(STL)的一部分。它和 map 非常相似,核心区别在于:multimap 允许键(key)重复。也就是说,你可以插入多个具有相同 key 的键值对。这使得 multimap 特别适合处理“一对多”映射关系的场景,比如学生与成绩、城市与天气记录等。
multimap 基本特性
multimap 内部通常基于红黑树实现,元素按照 key 自动排序(默认升序)。每个元素都是一个 pair 类型,包含 key 和 value。由于支持重复 key,插入操作不会覆盖已有元素,而是直接添加新节点。
- 头文件:#include
- 定义方式:std::multimap
mm; - 元素自动按 key 排序
- 允许重复 key
- 不支持通过下标直接访问(如 mm["a"] 不推荐用于 multimap)
常用操作方法
以下是 multimap 提供的核心操作接口及使用示例:
1. 插入元素
使用 insert() 方法插入键值对:
std::multimap<std::string, int> scores;
scores.insert({"Alice", 85});
scores.insert({"Bob", 90});
scores.insert({"Alice", 92}); // 允许重复 key
也可以插入 pair 对象:
scores.insert(std::make_pair("Charlie", 88));
2. 遍历所有元素
由于可能有重复 key,通常使用迭代器遍历:
for (const auto& pair : scores) {
std::cout << pair.first << ": " << pair.second << "\n";
}
输出结果会按键排序,相同 key 的元素相邻排列。
3. 查找特定 key 的所有元素
使用 find() 只能返回第一个匹配项,要获取所有相同 key 的值,应使用 equal_range():
Mistral AI
Mistral AI被称为“欧洲版的OpenAI”,也是目前欧洲最强的 LLM 大模型平台
182
查看详情
auto range = scores.equal_range("Alice");
for (auto it = range.first; it != range.second; ++it) {
std::cout << it->second << " "; // 输出: 85 92
}
equal_range 返回一个 std::pair,包含指向第一个和最后一个匹配元素的迭代器。
4. 删除元素
可删除指定 key 的所有元素,或仅删除某个迭代器指向的元素:
scores.erase("Alice"); // 删除所有 key 为 "Alice" 的元素
// 或者
auto it = scores.find("Bob");
if (it != scores.end()) {
scores.erase(it); // 删除单个元素
}
5. 统计某个 key 出现次数
使用 count() 方法:
size_t cnt = scores.count("Alice"); // 返回 2
应用场景举例
假设我们要记录每个学生的多门课程成绩:
std::multimap<std::string, double> studentGrades;
studentGrades.insert({"Tom", 85.5});
studentGrades.insert({"Tom", 90.0});
studentGrades.insert({"Jerry", 78.5});
studentGrades.insert({"Tom", 88.0});
// 查询 Tom 的所有成绩
auto range = studentGrades.equal_range("Tom");
std::cout << "Tom's grades: ";
for (auto it = range.first; it != range.second; ++it) {
std::cout << it->second << " ";
}
// 输出: Tom's grades: 85.5 90 88
这种结构比 map 更灵活,避免了手动维护 vector 等嵌套结构的复杂性。
注意事项
使用 multimap 时需注意以下几点:
- 不能使用 mm[key] 形式访问元素,因为该操作只适用于可修改且唯一 key 的 map
- 插入性能为 O(log n),查找单个元素也是 O(log n),但获取所有相同 key 的元素需配合 equal_range
- 若不需要排序,仅需快速查找且允许重复 key,可考虑使用 std::unordered_multimap
基本上就这些。multimap 在需要保留重复键并保持有序的场景中非常实用,掌握它的基本操作和边界情况,能有效提升数据管理效率。
以上就是C++ multimap用法详解_C++允许重复key的字典容器操作的详细内容,更多请关注其它相关文章!
# 都是
# 石家庄网站建设大型
# 企业如何展示网站建设
# 塔城地区关键词排名
# 牡丹江大学网站建设
# 洛阳seo公司
# 获嘉seo优化快速排名
# 淡季推广旺季营销方案
# 舒城网站seo优化
# 靖江seo营销
# seo及新媒体营销教程
# 你可以
# 升序
# 是一个
# 重复key字典
# 迭代
# 欧洲
# 遍历
# 第一个
# 如何实现
# 键值
# red
# 排列
# 键值对
# 区别
# c++
# ai
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
蓝湖怎样用切图标注提对接效率_蓝湖用切图标注提对接效率【设计对接】
c++如何实现一个简单的软件渲染器_c++从零开始的3D图形学
Python字典中优雅地迭代剩余元素的方法
使用Pandas转换并合并DataFrame:多列映射至统一结构
火狐浏览器占用内存高卡顿怎么办 火狐浏览器性能优化设置技巧
品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程
解决Bootstrap卡片顶部边距导致背景图下移的问题
2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC
顺丰快递查单号物流信息 顺丰快递小程序查询入口
Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程
Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口
抖音怎么赚钱_抖音创作者变现方法与途径指南
如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置
俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航
必由学登录入口 必由学官方网站在线访问链接
俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达
J*a如何使用AtomicInteger控制计数_J*a无锁计数器性能分析
在命令行怎么运行html项目_命令行运行html项目方法【教程】
深入理解Go语言中Map值与方法接收器的交互:为什么需要临时变量
LINUX的I/O重定向是什么_深入理解LINUX中 >、>> 与 < 的区别
响应式容器内容自动缩放与宽高比维持教程
谷歌浏览器一键优化方案_谷歌浏览器直达主页极速不卡版
优化Log4j2控制台输出性能:解决异步日志瓶颈
在Pyomo中实现基于变量的条件约束:Big-M方法详解
漫画星球免费下拉式入口 漫画星球免费漫画在线阅读网站
蛙漫移动版在线看 蛙漫手机浏览器直达入口
Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】
qq邮箱日历功能怎么用_创建日程与会议邀请的技巧
CSS实现侧边栏导航项全宽圆角悬停背景效果
J*aScript DOM操作:高效清空列表元素的策略与实践
红果短剧网页版官网入口 官方最新网址发布
Fabric模组开发:自定义物品与物品组的现代管理方法
《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!
荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS
如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流
实现分段式页面滚动导航:CSS与J*aScript教程
J*aScript打印功能_j*ascript输出控制
搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具
为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法
Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践
谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示
Golang如何使用net/url解析URL_Golang URL解析与处理方法
C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入
Centos/Linux 系统下安装 composer 的完整步骤
利用Bokeh CustomJS动态控制DataTable列可见性
动漫花园资源网使用步骤_动漫花园资源网下载流程
使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战
抖音网页版快捷访问 抖音网页版网页版入口操作教程


2025-12-05
浏览次数:次
返回列表