C++ STL之map、multimap

发布时间 2023-09-10 23:52:07作者: Arthurian

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 }