map基本概念
简介:
- map中所有元素都是pair类型
- pair中第一个元素是key,第二个元素是value
- 所有元素会根据key从小到大自动排序
原理
特点:
- 可以根据key的值快速找到对应的value
- key只能出现一次
- 可根据key的值自动排序
map常用函数
map的定义
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<int,int> mp;
return 0;
}
map的插入和删除
- insert()插入函数
- clear()清空函数
- erease删除函数
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
map<int,int> mp;
void ct(map<int,int> &mp)
{
for(map<int,int>::const_iterator i=mp.begin();i!=mp.end();i++)
cout <<"key=" << (*i).first <<"value=" << i->second << endl;
}
void init()
{
mp.insert(pair<int,int>(1,10));
mp.insert(make_pair(2,20));
mp.insert(map<int,int>::value_type(3,30));
mp[4]=40;
ct(mp);
m.erase(m.begin());
ct(m);
m.erase(3);
ct(m);
m.clear();
ct(m);
}
int main()
{
init();
return 0;
}
map的大小,交换,及判空
- size()返回长度大小
- swap()交换两个map
- empty()判断是否为空,若为空返回1,否则返回0
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
void ct(map<int,int> &mp)
{
for(map<int,int>::const_iterator i=mp.begin();i!=mp.end();i++)
cout <<"key=" << (*i).first <<"value=" << i->second << endl;
}
void test1()
{
map<int,int> m;
m.insert(make_pair(1,10));
m.insert(make_pair(2,20));
m.insert(make_pair(4,40));
m.insert(make_pair(3,30));
if(m.empty()) cout<<"m为空"<<endl;
else cout<<m.size()<<endl;
ct(m);
}
void test2()
{
map<int,int> m1;
map<int,int> m2;
m1.insert(make_pair(1,10));
m1.insert(make_pair(2,20));
m1.insert(make_pair(3,30));
m2.insert(make_pair(4,40));
m2.insert(make_pair(5,50));
m2.insert(make_pair(6,60));
m1.swap(m2);
ct(m1);
cout<<endl;
ct(m2);
}
int main()
{
test1();
test2();
return 0;
}
map的查找和统计
- find()查找函数,查找key是否存在,若存在则返回该元素的迭代器,否则返回map.end();
- count()统计key出现的次数,因为map中不存在key相同的元素,所以该函数返回值只能为1或0
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
void test()
{
map<int,int> mp;
mp.insert(make_pair(1,10));
mp.insert(make_pair(2,20));
mp.insert(make_pair(3,30));
map<int,int>::iterator ans=mp.find(3);
if(ans!=mp.end()) cout<<"key="<<ans->first<<" "<<"value"<<ans->second<<endl;
cout<<mp.count(3)<<endl;
}
int main()
{
test();
return 0;
}