map使用手册

文章目录

  • map的使用手册
    • map的介绍
    • map的内部结构
    • map的操作
      • map插入数据
      • map初始化
        • 一般map的初始化
        • 多层嵌套map的初始化
      • map遍历
        • 第一种:应用前向迭代器
        • 第二种:应用反相迭代器
        • 第三种,用数组的形式
      • map的数据查找
        • 第一种:count函数判断
        • 第二种:find函数
        • 第三种:lower_bound函数与upper_bound函数
      • map的数据删除
        • erase()函数
        • clear()函数

map的使用手册

  • 我找不到之前参考的博文链接了,只好写原创,对于原创作者感到抱歉

map的介绍

  • map是键值对数据集合,key必须唯一
    • 主要用来查找key对应value,要求key必须是可排序的,必须支持<比较运算符
    • map默认是以key升序存放键值对数据,比较适合二分查找

map的内部结构

  • map使用pair类模板保存key与value
  • pair有两个public成员变量:first和second
    • first存放key
    • second存放value
  • 在map里面可以使用map<>::value_type表示pair

map的操作

map插入数据

  • 用insert函数插入数据,在数据的插入上涉及到集合的唯一性
    • 即当map中存在该关键字时,insert操作无法插入数据
  • 如果用数组方式,它可以覆盖以前该关键字对应的值
    map m;
    //insert形式
    m.insert({ 1,"ABC"});//这样就行
    m.insert(2,make_pair(string("ABC")));
	m.insert(map::value_type(3,"ABC"));
	//数组形式
	m[1]="efg";

map初始化

一般map的初始化

//列表初始化
map m={{1,"duanjie"},{2,"yanwanli"}};
//数组赋值
m[3]="adc";
//insert添加
m.insert({ 4,"ABC"});

多层嵌套map的初始化

map>>  m;
m[1]["abc"].push_back("ABC");

map遍历

第一种:应用前向迭代器

    map m={{1,"abc"},{2,"def"}};
//第1种
    map::iterator iter;
    iter = m.begin();
    while(iter != m.end()){
        cout << iter->first << "-" << iter->second << endl;
        iter++;
    }
//第2种
    for(auto &it : m){
        cout << it.first << "-" << it.second <

第二种:应用反相迭代器

  • 实现反向遍历
    map m;
    for(map::reverse_iterator rit=m.rbegin();rit!=m.rend();rit++) 
        cout<<(*rit).first<<","<<(*rit).second<

第三种,用数组的形式

	//数组形式
	map m;
	int L=m.size();
	for(int i=1;i<=L;i++){
		cout<

map的数据查找

第一种:count函数判断

  • 其缺点是无法定位数据出现位置,由于map的特性,一对一的映射关系,就决定了count函数的返回值只有两个,要么是0,要么是1,出现的情况,当然是返回1了
	map m={{1,"abc"},{2,"edf"}};
	if(m.count(1)){
		cout<<"YES"<

第二种:find函数

  • 定位数据出现位置
  • 它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器
	map m={{1,"abc"},{2,"edf"}};
    map::iterator iter;
    iter =m.find(1);
    if(iter !=m.end())
    {
    	cout<<"Find it :"<second<

第三种:lower_bound函数与upper_bound函数

  • lower_bound函数用法,这个函数用来返回要查找关键字的下界(是一个迭代器)
  • upper_bound函数用法,这个函数用来返回要查找关键字的上界(是一个迭代器)

例如:map中已经插入了1,2,3,4的话,如果lower_bound(2)的话,返回的2,而upper-bound(2)的话,返回的就是3,如果两个迭代器相等就意味着不存在这个关键字

	map m={{1,"abc"},{4,"edf"}};
    map::iterator iter1,iter2;
    iter1 =m.lower_bound(2);
    iter2=m.upper_bound(2);
    if(iter1->first==iter2->first)
    {
    	cout<<"Not Found!"<second<

map的数据删除

erase()函数

  • 移除某个map中某个条目用erase()
    iterator erase(iterator it);//通过一个条目对象删除
    iterator erase(iterator first,iterator last)//删除一个范围
    size_type erase(const Key&key);//通过关键字删除

//例如
	map m={{1,"abc"},{4,"edf"}};
    map::iterator iter1,iter2;
    m.erase(1);
    if(m.count(1)){
    	cout<<"Yes"<

clear()函数

  • clear()函数相当于
enumMap.erase(enumMap.begin(),enumMap.end());