map/multimap容器

151 阅读2分钟

map容器

map中所有元素都是pair
pair中第一个元素为key键值起到所以作用,第二个为value(实值)
所有元素都会根据元素的键值自动排序
本质:
map和multimap属于关联式容器,底层结构用二插树实现的,
优点:可以根据key值快速找到value值
map:不可以重复key值元素
multimap:允许重复key值元素

map构造和赋值

对map容器进行构造和赋值纯操作
构造:map<T1,T2>mp;	//map默认构造函数;
map(const map &mp);	//拷贝构造函数
赋值:map& operator=(const map &mp);	//重载等号操作符

map实例

void printMap(map<int,int>&m){
	for(map<int,int>::iterator it=m.begin(); it != m.end(); it++){
    	cout<<"key="<<(*it).first<<"value="<<it->second<<endl;
    }
    cout<<endl;
}
void test01(){
	//创建map容器
    map<int,int>m;	//一个是key一个value
    m.insert(pair<int,int>(1,10));	//key 和 value
    //拷贝构造
    map<int,int>m2(m);
    //赋值
    map<int,int>m3;
    m3=m2;
    printMap(m3);
}


map大小和交换

统计map容器大小以及交换map容器
函数原型:
size();	//大小
swap();	//交换
//大小操作
map<int,int>m;
m.insert(pair<int,int>(1,10));
m.insert(pair<int,int>(2,20));
if(m.empty()){
	cout<<"m为空"<<endl;
}else{
	cout<<"m不为空"<<endl;
    cout<<"m的大小为:"<<m.size()<<endl;
}
//交换
map<int,int>m;

//插入和删除
insert(elem);	//插入
clear();	//
erase(pos);	//
erase(beg,end);	//删除区间[]
erase(key);	//删除容器中值为key的元素

map<int,int>m;
//插入
//第一种
m.insert(pair<int,int>(1,10);
//第二种
m.insert(make_pair(2,20));
//第三种
m.insert(map<int,int>::value_type(3,30));
//第四种
m[4]=40;	//不建议使用,如果插错了,会自动创建
//删除
m.erase(30);	//按照key删除
m.erase(m.begin(),m.end());	//在这个区间删除

map查找和统计

map容器进行查找数据以及统计数据
find(key);	//查找key是否存在,若存在返回钙元素的迭代器
count(key);	//统计key的元素

//查找
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));

map<int,int>::iterator pos=m.find(3);	//
if(pos != m.end()){
	cout<<"查到了元素key="<<(*pos).first<<"value="<<pos->second<<endl;
}else{
	cout<<"未找到元素"<<endl;
}
//统计
int num=m.count(3);
cout<<"num="<<num<<endl;

map排序

map容器默认排序规则为 按照key值进行从小到大排序,掌握如何
#include<iostream>
//map容器 排序

map<int,int>m;
m.insert(make_pair(1,10));
m.insert(make_pair(2,20));
m.insert(make_pair(3,30));
for(map<int,int>::ierator it = m.begin(); it != m.end(); it++){
	cout<<"key="<<it->first<<"value="<<it->second<<endl;
}
//排序
class MyCompare{
public:
	bool operator()(int v1, int v2){
    	//降序
        return v1>v2;
    }
};