STL之multimap 多重映射

这里写目录标题

  • STL之multimap 【多重映射】
      • 头文件
      • 创建 `std::multimap`
      • 插入元素
      • 遍历 `std::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的用法就讲到这里,关注我,为大家持续分享更多的内容,让学习变得更简单,与君共勉,共同成长。