C++学习第二十二课:STL映射类的深入解析
在C++标准模板库(STL)中,映射类(std::map
和std::multimap
)是用来存储关联数据的容器。与集合类不同,映射类中的每个元素都是一个键值对(key-value pair),其中键用于保持元素的唯一性和排序。本课将详细介绍STL映射类的使用,并通过示例代码展示其功能。
1. 映射类概述
映射类容器存储键值对,允许通过键快速查找、插入和删除元素。
示例代码
#include <map>
std::map<int, std::string> capitalCities;
capitalCities[1] = "Beijing";
capitalCities[2] = "New Delhi";
2. 初始化映射
映射可以初始化为一个空容器,或者使用键值对列表进行初始化。
示例代码
std::map<int, std::string> capitals = {{1, "Beijing"}, {2, "New Delhi"}};
3. 访问和修改元素
通过键访问和修改映射中的元素。
示例代码
std::string& capital = capitals[1]; // 获取键为1的元素的引用
capital += " (China)";
4. 添加元素
使用下标操作符[]
或insert
函数向映射中添加元素。
示例代码
capitalCities.insert({3, "Tokyo"});
5. 移除元素
使用erase
函数从映射中移除元素。
示例代码
auto it = capitalCities.find(2);
if (it != capitalCities.end()) {
capitalCities.erase(it); // 移除键为2的元素
}
6. 映射迭代器
使用迭代器遍历映射中的所有元素。
示例代码
for (const auto& pair : capitalCities) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
7. 映射的键值查找
使用find
函数查找特定键的元素。
示例代码
auto it = capitalCities.find(3);
if (it != capitalCities.end()) {
std::cout << "Found: " << it->second << std::endl;
}
8. 映射的大小和容量
使用size
和max_size
函数获取映射的大小和最大容量。
示例代码
std::size_t size = capitalCities.size();
9. std::multimap
std::multimap
允许键的重复,存储多个具有相同键的元素。
示例代码
#include <multimap>
std::multimap<std::string, int> scores;
scores.insert({"Alice", 90});
scores.insert({"Alice", 95});
10. 映射的排序
映射类容器中的元素按照键的顺序自动排序。
示例代码
std::map<char, int> freq;
// ... 填充freq ...
for (const auto& pair : freq) {
std::cout << pair.first << " appears " << pair.second << " times" << std::endl;
}
结语
通过本课的学习,你深入了解了STL中的映射类容器,包括std::map
和std::multimap
,以及它们的初始化、元素访问、添加和移除元素、迭代器使用、内存管理、异常安全性、实际应用、线程安全性和性能考量。
映射类容器是C++中处理键值对数据的强大工具,它们在需要快速查找和存储关联数据的场景下非常有用。掌握映射类容器的使用对于编写高效、安全、可维护的C++程序至关重要。