news 2025/12/28 10:05:31

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进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/27 3:32:06

day38GPU训练及类的call方法@浙大疏锦行

day38GPU训练及类的call方法浙大疏锦行 虽然 loss.item() 会触发从 GPU → CPU 的同步/拷贝&#xff0c;但总耗时由多个成分共同决定&#xff08;固定开销 每 epoch 的计算 同步/打印开销&#xff09;&#xff0c;因此改变记录次数不一定线性改变剩余时长。另外存在异步排队…

作者头像 李华
网站建设 2025/12/26 16:41:14

GPT-OSS-20B vs ChatGPT:开源替代方案的性能对比实测

GPT-OSS-20B vs ChatGPT&#xff1a;开源替代方案的性能对比实测 在大模型席卷各行各业的今天&#xff0c;越来越多企业开始面临一个现实问题&#xff1a;我们是否必须依赖OpenAI的API来获得高质量的语言生成能力&#xff1f;尤其是当业务涉及敏感数据、高频调用或定制化需求时…

作者头像 李华
网站建设 2025/12/27 23:14:31

【场景】笛卡尔积

电商系统中商品多规格选项&#xff08;颜色、容量、版本等&#xff09;的组合问题&#xff0c;核心算法是「笛卡尔积&#xff08;Cartesian Product&#xff09;」&#xff1b;如果涉及「过滤无效组合&#xff08;比如某颜色无某容量&#xff09;」「关联SKU/价格/库存」&#…

作者头像 李华
网站建设 2025/12/28 8:30:11

GPT-OSS-20B如何通过Harmony响应格式提升专业任务准确率

GPT-OSS-20B如何通过Harmony响应格式提升专业任务准确率 在企业级AI应用日益深入的今天&#xff0c;一个现实问题摆在开发者面前&#xff1a;我们是否真的需要动辄上百亿参数、依赖昂贵GPU集群的大模型来处理专业领域的复杂任务&#xff1f;越来越多的实践表明&#xff0c;真正…

作者头像 李华
网站建设 2025/12/25 21:12:07

21届智能车赛规则文档风格借鉴:编写ACE-Step技术白皮书

ACE-Step&#xff1a;开源音乐生成模型的技术演进与工程实践 在内容创作全面加速的今天&#xff0c;音乐——这一曾经高度依赖专业技能的艺术形式&#xff0c;正经历一场由AI驱动的民主化变革。无论是短视频创作者急需一段贴合情绪的背景乐&#xff0c;还是游戏开发者希望实现动…

作者头像 李华
网站建设 2025/12/27 8:20:32

亚马逊云科技储瑞松:AI智能体正在重塑未来工作模式

在全球云计算与人工智能技术加速融合的时代大潮下&#xff0c;作为全球IT行业一年一度的顶级盛宴&#xff0c;亚马逊云科技2025 re:Invent全球大会在美国拉斯维加斯如约而至。来自大中华区的五百余位客户与合作伙伴&#xff0c;也在大会现场见证了这一行业盛事。大会期间&#…

作者头像 李华