1. map的定义
map<typenam1,typename2> mp;
2. map容器内元素的访问
- 通过下标访问,map中的键是唯一的
//通过下标访问时需要先检查key是否存在,不检查的话会在map中添加(key,value),其中value是默认值,然后返回value //检查key存在否可以用find(key)或者mp.count(key)。find(key),key存在时返回迭代器,迭代器等于end()时表示不存在;mp.count(key),存在时返回1,否则返回0
mp['c']=2;
printf("%d",mp['c']);
- 通过迭代器访问
//it->first来访问key,it->second来访问value;
for(map<int,int>::iterator it=mp.begin();it!=mp.end();it++)
3. map常用函数
-
find(key)返回key的映射的迭代器
-
erase()可以删除单个或一个区间的所有元素
- 删除单个元素有两种方法
- mp.erase(it) 通过迭代器删除
- mp.erase(key) 通过key删除
- 删除一个区间的所有元素
mp.erase(begin,end),begin为所删除区间的开始迭代器,end为区间末尾的下一个地址
- 删除单个元素有两种方法
-
size() 获得map中映射的个数
-
clear() 清空map中所有元素
-
empty() 判断map是否为空
4. map中添加数据
map<int ,string> maplive;
maplive.insert(pair<int,string>(102,"aclive"));
maplive.insert(map<int,string>::value_type(321,"hai"));
maplive[112]="April";//map中最简单最常用的插入添加!
5. map中的排序问题
map中默认是以key的升序排列,所以不能对map使用sort函数,如果需要排序则先放进vector中再排序。
bool cmp(const pair<string, int>& a, const pair<string, int>& b) {
return a.second < b.second;
}
int main()
{
//1、map这里指定less作为其默认比较函数(对象),就是默认按键值升序排列
map<string, int> name_score_map;
name_score_map["LiMin"] = 90;
name_score_map["ZiLinMi"] = 79;
name_score_map["BoB"] = 92;
name_score_map.insert(make_pair("Bing", 99));
name_score_map.insert(make_pair("Albert", 86));
// 将map中的内容转存到vector中
vector<pair<string, int>> vec(name_score_map.begin(), name_score_map.end());
//对线性的vector进行排序
sort(vec.begin(), vec.end(), cmp);
for (int i = 0; i < vec.size(); ++i)
cout << vec[i].first << endl;
system("pause");
return 0;
}