这里写目录标题
- 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的用法就讲到这里,关注我,为大家持续分享更多的内容,让学习变得更简单,与君共勉,共同成长。