在C++ STL(Standard Template Library)中,map是一种关联容器,用于存储键值对。它基于二叉搜索树的数据结构,通过红黑树实现,保证了键的有序性。map容器中的元素按键的大小进行排序,且每个键只能出现一次。在map中,键和值是成对存储的,并且键和值可以是任何数据类型,包括基本类型和自定义类型。
map容器提供了以下主要函数和操作:
- 插入元素:使用insert()函数可以向map容器中插入元素。插入元素时,需要指定键值对。
- 删除元素:使用erase()函数可以从map容器中删除元素。可以根据键来删除元素。
- 访问元素:使用at()函数可以根据键来获取对应的值。使用[]运算符也可以实现。
- 查找元素:使用find()函数可以根据键来查找元素。如果找到了对应的键,则返回指向该元素的迭代器;如果未找到,则返回end()迭代器。
- 遍历元素:可以使用迭代器来遍历map容器中的所有元素。
- 大小和容量:使用size()函数可以获取map容器中元素的个数。使用empty()函数可以判断map容器是否为空。
以下是一个示例代码:
#include <iostream>
#include <map>
int main() {
std::map<int, std::string> myMap;
// 插入元素
myMap.insert(std::make_pair(1, "one"));
myMap.insert(std::make_pair(2, "two"));
myMap.insert(std::make_pair(3, "three"));
// 访问元素
std::cout << myMap.at(2) << std::endl; // 输出:two
std::cout << myMap[3] << std::endl; // 输出:three
// 查找元素
std::map<int, std::string>::iterator it = myMap.find(1);
if (it != myMap.end()) {
std::cout << "找到了键为1的元素:" << it->second << std::endl;
} else {
std::cout << "未找到键为1的元素" << std::endl;
}
// 遍历元素
for (it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << it->first << ": " << it->second << std::endl;
}
// 删除元素
myMap.erase(2);
// 判断map是否为空
if (myMap.empty()) {
std::cout << "map容器为空" << std::endl;
} else {
std::cout << "map容器不为空,大小为:" << myMap.size() << std::endl;
}
return 0;
}
上述示例代码中,首先创建了一个map容器myMap,键的类型为int,值的类型为std::string。然后使用insert()函数插入了三对键值对。接下来使用at()函数和[]运算符访问了其中的元素,使用find()函数查找了一个键,使用迭代器遍历了所有的元素。最后使用erase()函数删除了一个元素,并使用empty()函数判断了map容器是否为空。