C++ STL之map、multimap
map和multimap是C++ STL(Standard Template Library)中的关联容器,它们提供键值对的存储和访问。
map是一个有序关联容器,它存储一组键值对,其中每个键都是唯一的。map中的键值对按照键的升序排序。用户可以通过键来访问、修改和删除对应的值。map的实现通常使用平衡二叉搜索树(如红黑树)来保证高效的查找、插入和删除操作。
multimap也是一个有序关联容器,与map不同的是,multimap允许存储多个具有相同键的键值对。multimap中的键值对也按照键的升序排序。用户可以通过键来访问、修改和删除对应的值。multimap的实现通常使用平衡二叉搜索树(如红黑树)来保证高效的查找、插入和删除操作。
下面是map和multimap的一些基本操作:
- 插入元素:可以使用insert()函数将一个键值对插入到容器中。
- 查找元素:可以使用find()函数通过键来查找对应的元素。
- 删除元素:可以使用erase()函数通过键来删除对应的元素。
- 遍历元素:可以使用迭代器或C++11中的范围for循环来遍历容器中的元素。
- 获取元素个数:可以使用size()函数来获取容器中元素的个数。
- 判断容器是否为空:可以使用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 }
本文来自博客园,作者:Arthurian,转载请注明原文链接:https://www.cnblogs.com/Arthurian/p/16653134.html
欢迎邮件交流:zhuanxinxin@aliyun.com