• C++map容器


    map容器的介绍

    基本概念:

    • map容器中都是键值对。
    • 可以快速从大量数据中找到数据。如:身份证和人名
    • 所有的元素都按照key值自动排序。

    本质:

    底层按照二叉树实现的。
    
    • 1

    map和multimap容器的区别:

    • map不允许重复的数值出现,multimap允许重复的key出现。

    map构造和赋值:
    构造:

    map<T1,T2> mp; //默认构造函数
    
    map(const map &mp);//拷贝构造
    
    • 1
    • 2
    • 3

    赋值:

    map& operator=(const map &mp); //重载等号运算符
    
    • 1

    按照key排序。

    void printMap(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;
    	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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    拷贝构造

    	map<int,int>m2(m);
    	printMap(m2);
    
    • 1
    • 2

    赋值

    	map<int,int>m3;
    	m3 = m2;
    
    • 1
    • 2

    总结:map中所有的元素都是成对出现的,插入的时候要是用对组。

    map大小和交换

    功能描述;

    • 统计map容器的大小以及交换map容器。
      函数原型:
    • size();
    • empty();
    • swap(st);
    void test01()
    {
    
    	//创建map容器
    	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);
    	if(m.empty())
    		cout<<"m为空"<<endl;
    	else
    		cout<<"m大小为:"<<m.size()<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    交换

    void test01()
    {
    
    	//创建map容器m1
    	map<int,int> m1;
    	m1.insert(pair<int,int>(1,10));
    	m1.insert(pair<int,int>(2,20));
    	m1.insert(pair<int,int>(3,30));
      //创建map容器m2
    	map<int,int> m2;
    	m2.insert(pair<int,int>(1,10));
    	m2.insert(pair<int,int>(2,20));
    	m2.insert(pair<int,int>(3,30));
    
      cout<<"交换前"<<endl;
    	printMap(m1);
    	printMap(m2);
    	m1.swap(m2);
      cout<<"交换前"<<endl;
    	printMap(m1);
    	printMap(m2);
    	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    总结:

    • size统计大小
    • empty判断为空
    • swap交换容器

    map容器的插入和删除

    功能描述:

    • map容器进行插入和删除数据
      函数原型:
      • insert();容器中插入数据
      • clear(); 情况所有的元素
      • erase(pos); 删除pos迭代器所指向的元素,返回下一个元素的迭代器
      • erase(beg,end); 删除区间[beg,end]的所有元素,返回下一个元素的迭代器
      • erase(key); 删除容器中值为key 的元素
        在这里插入图片描述

    插入:

    void test1(){
    	map<int,int>m;
    1、
    m.insert(pair<int,int>(1,10));
    
    2、
    m.insert(make_pair(2,20));
    
    3、
    m.insert(map<int,int>::value_type(3,30));
    
    4、
    	m[4] = 40;
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    删除操作:

    m.erase(m.begin());
    printMap(m);
    
    m.erase(3);//按照key删除
    printMap(m);
    
    
    //清空
    m.erase(n.begin(),m.end());
    m.clear();
    printMap(m);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    map查找和统计

    功能描述:

    • 对map容器进行查找数据以及统计数据
    • 函数原型
    • find(key);查找key是否存在,存在返回这个元素的迭代器,否则返回set.end();
    • count(key);统计key个数
    m.insert(pair<int,int>(1,10));
    m.insert(pair<int,int>(2,20));
    m.insert(pair<int,int>(3,30));
    map<int,int>::interator pos = m.find(3);
    if(pos!=m.end){
    	cout<<"查到了元素key = "<<pos->first<<"value = "<<pos->end<<endl;
    }else{
    	cout <<"未查到该元素"<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    统计

    • map不允许插入重复的key元素,count统计来说,要么是0,要么是1.

    • multimap的count统计key大于1

    int num = m.count(3); //统计key为3的数目
    
    cout<<"num = "<<num<<endl;
    
    • 1
    • 2
    • 3

    总结:

    • 查找 find(返回的是迭代器)
    • 统计 count (对于map,结果为0或者是1)

    map容器排序

    map容器默认排序为key数值从小到大排序,掌握仿函数改变排序规则。

    class MyCompare{
    
    public:
    	bool operator()(int v1,int v2){
    	//降序
    		return v1>v2;	
    }
    }
    
    void test01(){
    	//默认从小到大排序
    	//利用仿函数实现从大到小排序
    	map<int,int,MyCompaer> 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));
    	m.insert(pair<int,int>(5,50));
    	for(map<int int,MyCompare>::iterator it = m.begin();it!=m.end();it++){
    		cout<<"key = "<<it->first<<"value = "<<it->second<<endl;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    MySQL基础
    Mysql查看慢查询日志
    中兴设备18种命令模式总结大全,全网第一篇,强烈建议收藏!
    【LeetCode】169. 多数元素
    【linux API 分析】register_chrdev
    python基础
    剑指Offer专项突破版(76)—— 数组中的第 k 大的数字
    RK3588平台开发系列讲解(摄像头篇)USB摄像头驱动分析
    开发一个app,需要申请哪些,费用是多少?
    CentOS7开机启动 jar包
  • 原文地址:https://blog.csdn.net/m0_46152793/article/details/126184812