这里写目录标题
- 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");
查找元素
你可以使用
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 存储这些优惠信息。
综合示例
以下是一个综合示例,展示了如何使用
#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; }