全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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 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():

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 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 在需要保留重复键并保持有序的场景中非常实用,掌握它的基本操作和边界情况,能有效提升数据管理效率。


# ai  # c++  # 区别  # 键值对  # 排列  # red  # count  # include  # 接口  # map  # 对象  # 键值  # 第一个  # 遍历  # 迭代  # 都是  # 是一个  # 升序  # 你可以  # 多个  # 已有 


相关文章: 西安大型网站制作公司,西安招聘网站最好的是哪个?  深圳网站制作平台,深圳市做网站好的公司有哪些?  建站之星免费模板:自助建站系统与智能响应式一键生成  网站制作知乎推荐,想做自己的网站用什么工具比较好?  c# 在ASP.NET Core中管理和取消后台任务  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  如何通过虚拟主机快速搭建个人网站?  已有域名如何快速搭建专属网站?  如何通过山东自助建站平台快速注册域名?  个人网站制作流程图片大全,个人网站如何注销?  建站之星CMS五站合一模板配置与SEO优化指南  如何快速查询网址的建站时间与历史轨迹?  免费网站制作appp,免费制作app哪个平台好?  如何在橙子建站中快速调整背景颜色?  寿县云建站:智能SEO优化与多行业模板快速上线指南  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  宝塔建站后网页无法访问如何解决?  网站专业制作公司有哪些,做一个公司网站要多少钱?  模具网站制作流程,如何找模具客户?  C++如何使用std::optional?(处理可选值)  导航网站建站方案与优化指南:一站式高效搭建技巧解析  如何高效配置IIS服务器搭建网站?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何用PHP工具快速搭建高效网站?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  太平洋网站制作公司,网络用语太平洋是什么意思?  建站主机与服务器功能差异如何区分?  如何自定义建站之星模板颜色并下载新样式?  如何通过商城自助建站源码实现零基础高效建站?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  代刷网站制作软件,别人代刷火车票靠谱吗?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  如何确认建站备案号应放置的具体位置?  存储型VPS适合搭建中小型网站吗?  ,南京靠谱的征婚网站?  平台云上自主建站:模板化设计与智能工具打造高效网站  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  javascript中的try catch异常捕获机制用法分析  如何彻底卸载建站之星软件?  大连网站制作公司哪家好一点,大连买房网站哪个好?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  如何通过多用户协作模板快速搭建高效企业网站?  如何在阿里云服务器自主搭建网站?  如何批量查询域名的建站时间记录?  历史网站制作软件,华为如何找回被删除的网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。