1.定义
map是一类关联容器,他提供一对一的数据处理能力。它的特点是增加和删除节点对迭代器的影响很小。而且map可以修改实值,而不能修改key。注意使用需要加头文件#include<map>
2.基本函数
2.1.构造函数
- std::map<int,int> ma1:创建一个空的map。
- std::map<int, int> ma1{ { 0, 0 }, { 1, 2 }, { 2, 3 } }:创建一个拥有元素{0,0},{1,2},{2,3}的map
- std::map<int, int> ma2(ma1):创建一个和ma1相同的ma2
- std::map<int, int> ma3(ma2.begin(),ma2.end()):创建一个拥有[begin(),end()]之间元素的map
2.2.添加元素
- ma1.insert(std::pair<int,int>(1,1)):添加一个元素(1,1)。但是当再次添加相同key的pair的时候将无法添加
- ma1.insert(std::map<int,int>::value_type(1,1)):效果和上面一样
- ma1[1]=3:添加元素(1,3),当再次添加相同key的元素时候将会把之前的值覆盖
2.3.删除元素
- ma1.erase(iter):使用迭代器从map中删除元素
- ma1.erase(1):从map中删除key为1的元素
- ma1.clear():将map中的所有元素删去
2.4.map中重要的迭代器
- ma1.begin():返回正向迭代器的第一个元素
- ma1.end():返回正向迭代器的最后一个元素的下一个位置
- ma1.rbegin():返回反向迭代器的第一个元素,即vector中的最后一个元素
- ma1.rend():返回反向迭代器的最后一个元素的下一个位置,即vector中的第一个元素的前一个位置
2.5.map其他函数
- ma1.empty():判断ma1是否为空
- ma1.size():返回ma1中元素的个数
- ma1.find(key):返回ma1中key所对应的迭代器
- ma1.count(key):返回ma1中key所对应元素个数(为0或1)
3.map使用实例
- upper_bound(),lower_bound():返回键值大于,小于等于给定元素的第一个位置
#include<iostream>
#include<map>
void main(){
std::map<int, int> ma1;
ma1[1] = 2;
ma1[9] = 10;
ma1[5] = 6;
ma1[3] = 4;
ma1[7] = 8;
ma1[11] = 12;
std::cout << ma1.upper_bound(5)->first << "," << ma1.lower_bound(5)->first;
}
- swap():交换两个map
#include <numeric>
#include<iostream>
#include<map>
void main(){
std::map<int, int> ma1{ { 1, 2 }, { 3, 4 }, { 5, 6 } };
std::map<int, int> ma2{ { 7, 8 }, { 9, 10 }, { 11, 12 } };
swap(ma1, ma2);
std::cout << "ma1 ";
for (auto ll : ma1)
{
std::cout << "{" << ll.first << "," << ll.second << "}";
}
std::cout << std::endl;
}