std::map
是 C++ 标准库中的一个关联容器,它用于存储键值对。每个键值对由一个键(key
)和一个对应的值(value
)组成,并且 std::map
会根据键自动排序。以下是 std::map
的一些主要特点和用法:
主要特点
-
自动排序:
std::map
会根据键的顺序自动对元素进行排序,默认是升序排序。排序依据是键的比较函数,通常是使用<
运算符进行比较。 -
唯一键:在
std::map
中,每个键是唯一的,不能有重复的键。如果插入一个已经存在的键,那么原有的值会被更新。 -
基于红黑树:
std::map
通常是基于红黑树(一种自平衡的二叉查找树)实现的,这使得插入、删除和查找操作的时间复杂度为 O(log n)。 -
键值对存储:每个元素都是一个
std::pair<const Key, T>
,其中Key
是键的类型,T
是值的类型。
示例代码
#include <iostream>
#include <map>
int main() {
std::map<int, std::string> myMap;
// 插入元素
myMap[1] = "one";
myMap[2] = "two";
myMap[3] = "three";
// 修改元素
myMap[3] = "new three";
// 删除元素
// 删除键为2的元素
myMap.erase(2);
// 访问元素
// 如果访问的键不存在,[] 操作符会插入一个默认构造的值。
std::cout << myMap[3] << std::endl;
// 遍历元素
for (const auto &pair : myMap) {
std::cout << pair.first << ": " << pair.second << '\n';
}
// 查找元素
// find 函数,如果找到了该元素,它会返回一个指向该元素的迭代器;如果没有找到,它会返回 std::map::end() 迭代器。
if (myMap.find(2) != myMap.end()) {
std::cout << "Key 2 exists with value: " << myMap[2] << '\n';
}
// 查找元素
// count 函数用于检查容器中是否存在指定的键 返回值要么是0要么是1 性能比find高些
if (myMap.count(2) > 0) {
std::cout << "Key 2 exists with value: " << myMap[2] << '\n';
}
return 0;
}
std::map
是一个非常灵活且功能强大的容器,适用于需要按键值对存储数据并保持排序的场景。