随笔 - 223  文章 - 0  评论 - 77  阅读 - 68万

C++ STL之map、multimap

map和multimap是C++ STL(Standard Template Library)中的关联容器,它们提供键值对的存储和访问。

map是一个有序关联容器,它存储一组键值对,其中每个键都是唯一的。map中的键值对按照键的升序排序。用户可以通过键来访问、修改和删除对应的值。map的实现通常使用平衡二叉搜索树(如红黑树)来保证高效的查找、插入和删除操作。

multimap也是一个有序关联容器,与map不同的是,multimap允许存储多个具有相同键的键值对。multimap中的键值对也按照键的升序排序。用户可以通过键来访问、修改和删除对应的值。multimap的实现通常使用平衡二叉搜索树(如红黑树)来保证高效的查找、插入和删除操作。

下面是map和multimap的一些基本操作:

  1. 插入元素:可以使用insert()函数将一个键值对插入到容器中。
  2. 查找元素:可以使用find()函数通过键来查找对应的元素。
  3. 删除元素:可以使用erase()函数通过键来删除对应的元素。
  4. 遍历元素:可以使用迭代器或C++11中的范围for循环来遍历容器中的元素。
  5. 获取元素个数:可以使用size()函数来获取容器中元素的个数。
  6. 判断容器是否为空:可以使用empty()函数来判断容器是否为空。

需要注意的是,map和multimap中的键是有序的,因此不支持通过下标访问元素的操作。此外,map和multimap中的元素默认按照键的升序排序,也可以通过自定义比较函数来实现其他排序方式。

map的示例代码

复制代码
 1 #include <iostream>  
 2 #include <map>  
 3 using namespace std;  
 4   
 5 int main() {  
 6     // 创建一个map容器,键为字符串,值为整数  
 7     map<string, int> mymap;  
 8     // 插入元素  
 9     mymap.insert(make_pair("apple", 3));  
10     mymap.insert(make_pair("banana", 2));  
11     mymap.insert(make_pair("orange", 1));  
12     // 查找元素  
13     auto it = mymap.find("banana");  
14     if (it != mymap.end()) {  
15         cout << "banana: " << it->second << endl;  
16     }  
17     // 删除元素  
18     mymap.erase("apple");  
19     // 遍历元素  
20     for (auto& x : mymap) {  
21         cout << x.first << ": " << x.second << endl;  
22     }  
23     // 获取元素个数  
24     cout << "size: " << mymap.size() << endl;  
25     // 判断容器是否为空  
26     cout << "empty: " << (mymap.empty() ? "true" : "false") << endl;  
27     return 0;  
28 }
复制代码

 

multimap的示例代码

复制代码
 1 #include <iostream>  
 2 #include <map>  
 3 #include <string>  
 4 #include <vector>  
 5   
 6 int main() {  
 7     std::multimap<int, std::string, std::greater<int>> students;  
 8   
 9     // 添加学生  
10     students.insert(std::make_pair(90, "Alice"));  
11     students.insert(std::make_pair(85, "Bob"));  
12     students.insert(std::make_pair(95, "Charlie"));  
13     students.insert(std::make_pair(80, "David"));  
14     students.insert(std::make_pair(95, "Eve"));  
15   
16     // 输出学生列表  
17     std::cout << "Students:\n";  
18     for (const auto& student : students) {  
19         std::cout << student.second << " (" << student.first << ")\n";  
20     }  
21   
22     return 0;  
23 }
复制代码

 

posted on   Arthurian  阅读(126)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示