std::map
是 C++ 标准库中的一个关联容器,用于存储键值对(key-value pairs),并根据键自动排序。它基于红黑树实现,具有对数时间复杂度的插入、删除和查找操作。
基本用法
1. 包含头文件
使用 std::map
需要包含头文件 <map>
。
#include <map>
2. 定义和初始化
std::map
的定义和初始化可以通过以下方式实现:
std::map<KeyType, ValueType> myMap;
例如,定义一个键为 int
,值为 std::string
的 std::map
:
std::map<int, std::string> myMap;
也可以在定义时初始化:
std::map<int, std::string> myMap = {{1, "Apple"},{2, "Banana"},{3, "Cherry"}
};
3. 插入元素
可以使用 insert
方法或 operator[]
插入元素。
-
使用
insert
:
myMap.insert(std::make_pair(4, "Date"));
-
使用
operator[]
:
myMap[5] = "Elderberry";
如果键已经存在,operator[]
会更新对应的值,而 insert
不会更新。
4. 访问元素
可以使用 operator[]
或 at
方法访问元素。
-
使用
operator[]
:
std::string fruit = myMap[1]; // fruit = "Apple"
-
使用
at
:
std::string fruit = myMap.at(2); // fruit = "Banana"
operator[]
在键不存在时会插入一个默认构造的值,而 at
会抛出 std::out_of_range
异常。
5. 删除元素
可以使用 erase
方法删除元素。
-
通过键删除:
myMap.erase(3); // 删除键为 3 的元素
-
通过迭代器删除:
auto it = myMap.find(2);
if (it != myMap.end()) {myMap.erase(it);
}
6. 查找元素
可以使用 find
方法查找元素。
auto it = myMap.find(1);
if (it != myMap.end()) {std::cout << "Found: " << it->second << std::endl;
} else {std::cout << "Not found" << std::endl;
}
7. 遍历元素
可以使用迭代器遍历 std::map
。
for (auto it = myMap.begin(); it != myMap.end(); ++it) {std::cout << it->first << ": " << it->second << std::endl;
}
或者使用范围-based for 循环:
for (const auto& pair : myMap) {std::cout << pair.first << ": " << pair.second << std::endl;
}
8. 其他常用操作
-
获取大小:
size_t size = myMap.size();
-
检查是否为空:
bool isEmpty = myMap.empty();
-
清空
std::map
:
myMap.clear();
示例代码
#include <iostream>
#include <map>
#include <string>int main() {std::map<int, std::string> myMap = {{1, "Apple"},{2, "Banana"},{3, "Cherry"}};// 插入元素myMap[4] = "Date";myMap.insert(std::make_pair(5, "Elderberry"));// 访问元素std::cout << "Key 1: " << myMap[1] << std::endl;std::cout << "Key 2: " << myMap.at(2) << std::endl;// 删除元素myMap.erase(3);// 查找元素auto it = myMap.find(4);if (it != myMap.end()) {std::cout << "Found: " << it->second << std::endl;} else {std::cout << "Not found" << std::endl;}// 遍历元素for (const auto& pair : myMap) {std::cout << pair.first << ": " << pair.second << std::endl;}return 0;
}
总结
std::map
是一个非常有用的容器,适用于需要根据键快速查找、插入和删除的场景。它的元素是按键自动排序的,因此在需要有序存储时非常方便。