1.简介:
- map中所有元素都是pair
- pair中第一个元素为key(键值),索引作用;第二个元素为value(实值)
- 所有元素按key值自动排序
- 头文件 #include<map>
2.本质:
- map/multimap属于关联式容器,底层结构是二叉树实现。
3.优点:
- 可以根据key值快速找到value值
4.map/multimap区别
- map不允许有重复key值元素
- multimap允许有重复key值元素
5.map构造和赋值
构造:
- map<T1,T2> mp; //默认构造方法
- map(const map &mp); //拷贝构造
赋值:
- map& operator=(const map &mp); //重载等号操作符
void printMap(map<int,int>&m){//打印输出
for(map<int,int>::iterator it=m.begin();it!=m.end();it++){
cout<<(*it).first<<it->second<<endl;//两种输出方式
}
}
void text{
map<int,int> m;//默认构造
m.insert(pair<int,int>(1,10));//匿名对组
m.insert(pair<int,int>(2,20));
m.insert(pair<int,int>(3,30));
m.insert(pair<int,int>(4,40));
printMap(m);
map<int,int>m2(m);//拷贝构造
printMap(m);
map<int,int>m3;//赋值
m3=m2;
printMap(m3);
}
6.map的大小和交换
- size(); //返回容器中元素数目
- empty(); //判断容器是否为空
- swap(st); //交换两个集合容器
void text{
if(m.empty()){
cout<<"空";
else
cout<<"非空"<<m.size();//大小
}
void text{//互换
m.swap(m2);
}
7.map插入与删除
- insert(elem); //插入元素
- clear(); //清除所有元素
- erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器
- erase(beg,end); //删除区间[beg,end]的所有元素,返回下一个元素的迭代器
- erase(key); //删除容器中值为key的元素
void text{
map<int,int>m;
m.insert(pair<int,int>(1,10));//插入法1
m.insert(make_pair(2,20));//插入法2
m.insert(map<int,int>::value_type(3,30));//插入法3
m[4]=40;//插入法4,[]不建议用插入,建议访问
m.erase(m.begin());//删除
m.erase(3);
m.erase(m.begin(),m.end());//清空
m.clear();//清空
}
8.map查找和统计:
- find(key); //查找key是否存在。存在,返回该键元素的迭代器;不存在,返回map.end();
- count(key); //统计key的元素个数,结果只有1或0. multimap的count可能大于1!
void text{//查找
map<int,int>::iterator pos=m.find(3);//迭代器接收值
if(pos!=m.end())
cout<<(*pos).first<<pos->second<<endl;
else
cout<<"无";
num=m.count(3);//统计
cout<<num;
}
9.map排序
用仿函数改变排序规则
class MyCompare{
public:
bool operator()(int v1,int v2){//降序
return v1>v2;
}
}
void text{
map<int,int,MyCompare>m;
for(map<int,int,MyCompare>::iterator it=m.begin();it!=m.end();it++){//输出
cout<<(*it).first<<it->second<<endl;//两种输出方式
}
}