news 2026/8/22 1:33:36

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/8/21 12:59:59

wiliwili手柄控制B站客户端:从启动失败到播放卡顿的完整解决方案

wiliwili手柄控制B站客户端&#xff1a;从启动失败到播放卡顿的完整解决方案 【免费下载链接】wiliwili 专为手柄控制设计的第三方跨平台B站客户端&#xff0c;目前可以运行在PC全平台、PSVita、PS4 和 Nintendo Switch上 项目地址: https://gitcode.com/GitHub_Trending/wi/…

作者头像 李华
网站建设 2026/8/21 5:05:50

HunyuanVideo-Foley深度学习模型在GitHub发布,支持npm安装一键集成

HunyuanVideo-Foley&#xff1a;当AI为视频“配声”&#xff0c;音画同步进入智能时代 在短视频日均产量突破千万条的今天&#xff0c;一个尴尬的现象依然普遍存在&#xff1a;大量用户生成内容&#xff08;UGC&#xff09;要么“无声胜有声”&#xff0c;要么靠拼接现成音乐硬…

作者头像 李华
网站建设 2026/8/22 0:51:41

苏州某机器人工厂5个研发设计共享一台SolidWorks服务器

在苏州某机器人工厂的研发设计部门&#xff0c;5名工程师正面临着SolidWorks协同设计的效率瓶颈。传统模式下&#xff0c;每位工程师需在本地工作站安装独立软件&#xff0c;导致版本冲突频发&#xff0c;大型装配体操作时频繁卡顿&#xff0c;设计迭代周期被迫延长。为解决这一…

作者头像 李华
网站建设 2026/8/21 2:11:25

磷酸铁锂,零下就让车主破防了,长江以北都不适合!

业界都清楚电车怕冷&#xff0c;但是车主没想到这么怕冷&#xff0c;磷酸铁锂电池在零下的温度续航就已低至六成左右了&#xff0c;如果再开空调啥的&#xff0c;那就只有四成续航了&#xff0c;这样的续航让长江以北的车主在这个冬天彻底破防了。某车主用的插混&#xff0c;电…

作者头像 李华
网站建设 2026/8/21 2:21:38

Qwen-Image-Edit-2509镜像发布:基于自然语言指令的智能图像编辑新突破

Qwen-Image-Edit-2509镜像发布&#xff1a;基于自然语言指令的智能图像编辑新突破 在电商大促期间&#xff0c;一个运营团队需要在几小时内更新上千张商品图的价格标签、促销文案甚至主视觉风格。传统流程中&#xff0c;这依赖设计师手动操作Photoshop&#xff0c;效率低、成本…

作者头像 李华
网站建设 2026/8/21 23:00:09

人类智能和机器智能之间存在不少非科学逻辑

“人类智能和机器智能共生共融的非科学逻辑”并非指它们的关系毫无规律&#xff0c;而是强调&#xff1a;真正决定二者能否“共生共融”的&#xff0c;并不只是算法、算力、数据这些“科学层”因素&#xff0c;更取决于一系列无法被完全形式化、却又真实左右融合进程的“非科学…

作者头像 李华