【C++STL】一篇总结std::map
std::map是一个功能强大的容器,适用于需要有序、唯一键值对的场景。通过掌握其基本操作和高级功能,可以有效地管理数据集合。在实际编程中,合理利用map可以提高代码的效率和可读性。才疏学浅,然孜孜不倦。欢迎大家批评指正!版权声明:本文为原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
目录
1、map概述
1.1map简介
std::map是C++ STL中的一个关联容器,其中的元素是成对出现的,称为键(key)和值(value)。键用于索引,而值则是与键相关联的数据。std::map保证所有的键都是唯一的,并且按照键的顺序自动排序。map可以被视为一个动态的、有序的、唯一键的数组。
1.2map初始化
(1)默认初始化
std::map<int, std::string> myMap;
(2)指定大小初始化
std::map<int, std::string> myMap(10); // 10是预留空间的大小,不是元素数量
(3)初始化列表
std::map<int, std::string> myMap = {{1, "one"}, {2, "two"}};
(4)复制初始化
std::map<int, std::string> anotherMap = myMap;
(5)范围初始化
std::vector<std::pair<int, std::string>> pairs = {{1, "one"}, {2, "two"}};
std::map<int, std::string> myMap(pairs.begin(), pairs.end());
- 关于std::pair补充:
在C++中,std::pair是一个模板类,用于表示一对值的组合,通常用于存储两个相关联但可能不同类型的数据。std::pair广泛用于STL容器中,如std::map和std::multimap,这些容器默认以std::pair作为存储元素的类型。
2、map基本操作
2.1map添加元素
- 使用
insert()方法添加单个元素:
std::map<int, std::string> myMap;
myMap.insert(std::make_pair(3, "three"));
- 使用
operator[]添加并获取引用:
myMap[4] = "four";
2.2map读取元素( find(), at() )
- 下标访问:
std::string value = myMap[1];
- 迭代器访问:
std::map<int, std::string> myMap = {{1, "one"}, {2, "two"}};
// find 返回迭代器指向当前查找元素的位置否则返回map::end()位置
auto it = myMap.find(1);
if (it != myMap.end()) {
std::string value = it->second; // 获取键为1的值
}
-
使用 at() 成员函数(C++17 引入):
std::map<int, std::string> myMap = {{1, "one"}, {2, "two"}};
// 使用at()方法直接通过键访问值
if (myMap.count(1) > 0) {
std::string value = myMap.at(1); // 获取键为1的值
}
2.3删除元素
- 删除特定键的元素:
int n = myMap.erase(2);//删除成功返回1,否则返回0
- 删除迭代器指向的元素:
auto it = myMap.find(3);
if (it != myMap.end()) {
myMap.erase(it);
}
- 删除范围内元素:
myMap.erase(myMap.begin() + i, myMap.end());
- 清空map:
myMap.clear();
3、map高级操作
3.1遍历map
//基于范围的for循环
for (const auto& pair : myMap) {
std::cout << pair.first << " : " << pair.second << std::endl;
}
3.2使用lower_bound和upper_bound
lower_bound()返回指向不小于给定键的最低元素的迭代器:
auto it = myMap.lower_bound(2);
upper_bound()返回指向不大于给定键的最高元素的迭代器:
auto it = myMap.upper_bound(2);
3.3equal_range
std::map::equal_range函数返回一个std::pair,其中包含两个迭代器:
first:指向区间的开始,即指向不小于给定键的最低元素的迭代器。second:指向区间的结束,即指向大于给定键的最高元素的迭代器的下一个位置。
在std::map中,因为所有的元素都是唯一的,所以equal_range实际上会返回一个包含单个元素的区间,如果给定的键存在于容器中的话。
std::pair<int, std::string> range = myMap.equal_range(3);
4、内部函数汇总
std::map提供了一系列的成员函数来操作容器中的元素:
size(): 返回容器中的元素数量。empty(): 检查容器是否为空。clear(): 移除容器中的所有元素。insert(): 向容器中插入元素。erase(): 从容器中删除元素。find(): 查找具有特定键的元素。count(): 返回具有特定键的元素数量(由于键的唯一性,结果总是0或1)。lower_bound(): 返回指向不小于给定键的最低元素的迭代器。upper_bound(): 返回指向不大于给定键的最高元素的迭代器。equal_range(): 返回一个范围,包含与给定键相等的所有元素(在map中总是一对迭代器)- value_comp() :返回比较容器中元素的函数对象,用来比较两个元素是否相等。
5、写在最后
std::map是一个功能强大的容器,适用于需要有序、唯一键值对的场景。通过掌握其基本操作和高级功能,可以有效地管理数据集合。在实际编程中,合理利用map可以提高代码的效率和可读性。
才疏学浅,然孜孜不倦。
欢迎大家批评指正 !
版权声明:本文为原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
更多推荐



所有评论(0)