STL之multimap 【多重映射】

STL之multimap 【多重映射】

multimap:多重映射,允许存储多个相同键的键-值对,并按键升序排序。

头文件

#include <map>

创建 std::multimap

multimap<std::string, int> students;  // 创建一个从学生姓名到分数的映射 multimap

插入元素

students.insert(make_pair("Alice", 95));
students.insert(make_pair("Bob", 88));
students.insert(make_pair("Alice", 92));  // 可以插入重复键
students.insert(make_pair("Charlie", 75));

遍历 std::multimap

for (const auto& student : students) {
    std::cout << student.first << ": " << student.second << std::endl;
}

删除元素

students.erase("Alice");

查找元素

你可以使用 find 函数来查找特定键的元素:

auto it = students.find("Bob");
if (it != students.end()) {
    std::cout << "Found: " << it->first << ": " << it->second << std::endl;
} else {
    std::cout << "Not Found" << std::endl;
}

场景应用

  • 关系数据库查询
    在数据库中,一个表中的某个字段可能有多个重复的值,如果需要将这些数据以关联的形式存储在内存中,multimap 是很好的选择。
  • 事件日志
    当记录一组事件时,每个事件都有一个时间戳作为键,如果有多个事件在同一时刻发生,可以使用 multimap 存储这些事件。
  • 课程和学生的关系
    一个学生可以选修多个课程,而一个课程也可以被多个学生选修。用 multimap 可以方便地表示这种多对多的关系。
  • 网络路由信息
    在计算机网络中,路由表可以用 multimap 来表示,其中键是目标 IP 地址或子网,值是到达该地址或子网的下一跳路由器。
  • 文件索引
    如果一个文件名可能有多个版本,或者一个关键词可能出现在多个文档中,可以使用 multimap 建立索引。
  • 用户权限管理
    用户可能有多个角色和权限,用 multimap 可以方便地存储这些信息。
  • Web 应用程序
    在 Web 应用中,如论坛、博客等,用户可以订阅多个标签或话题,可以使用 multimap 将用户与他们关注的话题关联起来。
  • 社交网络
    用户可能有多个好友,而一个好友也可能有多个好友,这种情况下可以使用 multimap 表示用户之间的朋友关系。
  • 购物车系统
    在电子商务应用中,一个商品可能有多个优惠券或折扣,可以用 multimap 存储这些优惠信息。

综合示例

以下是一个综合示例,展示了如何使用 std::multimap 存储学生姓名和分数,并遍历它:

#include <iostream>
#include <map>

int main() {
    std::multimap<std::string, int> students;
    students.insert(std::make_pair("Alice", 95));
    students.insert(std::make_pair("Bob", 88));
    students.insert(std::make_pair("Alice", 92));
    students.insert(std::make_pair("Charlie", 75);

    for (const auto& student : students) {
        std::cout << student.first << ": " << student.second << std::endl;
    }

    auto it = students.find("Bob");
    if (it != students.end()) {
        std::cout << "Found: " << it->first << ": " << it->second << std::endl;
    } else {
        std::cout << "Not Found" << std::endl;
    }

    students.erase("Alice");

    for (const auto& student : students) {
        std::cout << student.first << ": " << student.second << std::endl;
    }

    return 0;
}

那么multimap的用法就讲到这里,关注我,为大家持续分享更多的内容,让学习变得更简单,与君共勉,共同成长。

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西里小诸葛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值