news 2026/6/9 20:58:17

C++的STL中的multimap与map比较

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++的STL中的multimap与map比较

STL中的multimap与map比较

主要区别

特性 map multimap
键唯一性 每个键只能出现一次 允许重复键
operator[] 支持 不支持
插入操作 插入重复键会失败 总是可以插入
访问方式 可直接通过键访问值 需要特殊方法处理多值

使用示例

  1. map示例(键唯一)
#include<iostream>#include<map>#include<string>intmain(){std::map<int,std::string>studentMap;// 插入元素studentMap[101]="Alice";studentMap[102]="Bob";studentMap[103]="Charlie";// 尝试插入重复键(会覆盖原有值)studentMap[102]="Bob Updated";// 覆盖原来的"Bob"// 使用insert(不会覆盖)studentMap.insert({104,"David"});autoresult=studentMap.insert({101,"Alice Duplicate"});// 插入失败,键已存在std::cout<<"Insert 101 again? "<<(result.second?"Success":"Failed")<<"\n";// 遍历for(constauto&pair:studentMap){std::cout<<"ID: "<<pair.first<<", Name: "<<pair.second<<"\n";}// 直接通过键访问std::cout<<"Student 102: "<<studentMap[102]<<"\n";return0;}
  1. multimap示例(允许重复键)
#include<iostream>#include<map>#include<string>intmain(){std::multimap<std::string,std::string>courses;// 插入元素(允许重复键)courses.insert({"Math","Algebra"});courses.insert({"Math","Calculus"});courses.insert({"Physics","Mechanics"});courses.insert({"Math","Geometry"});// 再次插入"Math"键courses.insert({"Physics","Optics"});// 遍历所有元素std::cout<<"All courses:\n";for(constauto&course:courses){std::cout<<"Department: "<<course.first<<", Course: "<<course.second<<"\n";}// 查找特定键的所有值std::string target="Math";autorange=courses.equal_range(target);std::cout<<"\nAll Math courses:\n";for(autoit=range.first;it!=range.second;++it){std::cout<<it->second<<"\n";}// 统计特定键的数量std::cout<<"\nNumber of Math courses: "<<courses.count("Math")<<"\n";// 注意:multimap不支持operator[]// courses["Math"] = "New Course"; // 错误!无法编译return0;}

实际应用场景

场景1:电话簿(一人有多个电话)

#include<iostream>#include<map>#include<vector>intmain(){// multimap实现:一人可以有多个电话std::multimap<std::string,std::string>phonebook;phonebook.insert({"Alice","123-4567"});phonebook.insert({"Alice","987-6543"});phonebook.insert({"Bob","555-1234"});phonebook.insert({"Alice","111-2222"});// 查找Alice的所有电话autoalicePhones=phonebook.equal_range("Alice");std::cout<<"Alice's phone numbers:\n";for(autoit=alicePhones.first;it!=alicePhones.second;++it){std::cout<<" "<<it->second<<"\n";}return0;}

场景2:使用map模拟multimap功能

#include<iostream>#include<map>#include<vector>#include<string>intmain(){// 使用map<string, vector<string>>实现类似multimap功能std::map<std::string,std::vector<std::string>>studentCourses;// 添加课程studentCourses["Alice"].push_back("Math");studentCourses["Alice"].push_back("Physics");studentCourses["Bob"].push_back("Chemistry");studentCourses["Alice"].push_back("Computer Science");// 访问Alice的所有课程std::cout<<"Alice's courses:\n";for(constauto&course:studentCourses["Alice"]){std::cout<<" "<<course<<"\n";}return0;}

常用方法对比

操作 map multimap
插入 insert() 或 operator[] 只能使用 insert()
查找 find() 返回单个迭代器 equal_range() 返回迭代器对
删除 erase(key) 删除一个元素 erase(key) 删除所有匹配键的元素
计数 count() 返回0或1 count() 返回键出现的次数

选择建议

· 使用map:当需要键值对且键是唯一的,或者需要通过键快速查找/修改值
· 使用multimap:当键可能重复,且需要维护所有关联值
· 考虑替代方案:有时 map<Key, vector> 可能比multimap更方便,特别是需要随机访问特定键的所有值时

两种容器都基于红黑树实现,提供了O(log n)的查找、插入和删除操作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 19:47:14

网页视频抓取神器:m3u8-downloader浏览器扩展使用指南

网页视频抓取神器&#xff1a;m3u8-downloader浏览器扩展使用指南 【免费下载链接】m3u8-downloader m3u8 视频在线提取工具 流媒体下载 m3u8下载 桌面客户端 windows mac 项目地址: https://gitcode.com/gh_mirrors/m3u8/m3u8-downloader 还在为网页上的精彩视频无法保…

作者头像 李华
网站建设 2026/6/9 16:22:09

开源T2V模型新星:Wan2.2-T2V-5B能否挑战Sora?

开源T2V新势力&#xff1a;当50亿参数模型遇上消费级GPU 在短视频日活突破十亿的今天&#xff0c;内容生产的“速度军备竞赛”已经白热化。MCN机构为一条爆款视频投入数万元拍摄成本&#xff0c;而另一边&#xff0c;有人用一段文本加半分钟等待&#xff0c;生成了结构完整、动…

作者头像 李华
网站建设 2026/6/9 17:41:23

Docker镜像优化技巧:减小ACE-Step容器体积提升加载速度

Docker镜像优化实践&#xff1a;如何将ACE-Step容器体积压缩60%并加速启动 在AI音乐生成模型逐步走向落地的今天&#xff0c;一个看似不起眼却影响深远的问题浮出水面&#xff1a;为什么用户点击“生成音乐”后要等上几十秒甚至更久&#xff1f;尤其是在边缘设备或低带宽环境下…

作者头像 李华
网站建设 2026/6/9 17:39:33

基于Markdown文档管理ACE-Step项目:提升开源协作效率

基于Markdown文档管理ACE-Step项目&#xff1a;提升开源协作效率 在AI生成内容&#xff08;AIGC&#xff09;浪潮席卷创意产业的今天&#xff0c;音乐创作正经历一场静默却深刻的变革。过去&#xff0c;一段高质量的原创配乐往往需要专业作曲家耗费数小时打磨&#xff1b;而如今…

作者头像 李华
网站建设 2026/6/9 17:42:13

基于Wan2.2-T2V-A14B的AI影视创作工作流优化策略

基于Wan2.2-T2V-A14B的AI影视创作工作流优化策略 在短视频爆发、广告迭代加速的今天&#xff0c;一支30秒的品牌宣传片从创意到成片动辄需要数周时间——脚本打磨、分镜绘制、实拍调度、后期合成……每一个环节都像齿轮一样咬合紧密&#xff0c;但也因此格外脆弱。一旦客户临时…

作者头像 李华
网站建设 2026/6/9 16:07:38

Day36 官方文档的阅读

1. 官方文档的检索方式&#xff1a;github和官网 2. 官方文档的阅读和使用&#xff1a;要求安装的包和文档为同一个版本 3. 类的关注点&#xff1a; 实例化所需要的参数普通方法所需要的参数普通方法的返回值 4. 绘图的理解&#xff1a;对底层库的调用 第一步是实例化这个…

作者头像 李华