• map容器/multimap容器


     

    目录

    1.map基本概念

    简介

    本质

    优点

    map和multimap区别

    2.map构造和赋值

    功能描述:

    函数原型

    3.map大小和交换

    功能描述

    函数原型

    4 map插入和删除

    功能描述

    函数原型

    5. map查找和统计

    功能描述

    函数原型

    6 map容器排序

    学习目标

    主要技术点


    1.map基本概念

    简介

    map中所有元素都是pair
    pair中第一个元素为key (键值),起到索引作用,第二个元素为value(实值)

    所有元素都会根据元素的键值自动排序

    本质

    map/multimap属于关联式容器,底层结构是用二叉树实现。

    优点

    可以根据key值快速找到value值

    map和multimap区别

    map不允许容器中有重复key值元素.

    multimap允许容器中有重复key值元素
     

    2.map构造和赋值

    功能描述:

    map容器进行构造和赋值操作

    函数原型

    构造

    map mp;            /map默认构造函数:
    map(const map &mp );     //拷贝构造函数

     

    赋值

    map& operator=( const map &mp);//重载等号操作符

     

    代码 

    1. #include
    2. using namespace std;
    3. #include
    4. //map容器构造和赋值
    5. void printMap(map<int,int>&m)
    6. {
    7. for(map<int,int>::iterator it = m.begin();it != m.end();it++)
    8. {
    9. cout << "key = "<<(*it).first <<" value = " <second << endl;
    10. }
    11. cout<
    12. }
    13. void test01()
    14. {
    15. map<int,int>m;
    16. m.insert(pair<int,int>(1,10));
    17. m.insert(pair<int,int>(3,30));
    18. m.insert(pair<int,int>(2,20));
    19. m.insert(pair<int,int>(4,40));
    20. printMap(m);
    21. //拷贝构造
    22. map<int,int>m2(m);
    23. printMap(m2);
    24. //赋值
    25. map<int,int>m3;
    26. m3 = m2;
    27. printMap(m3);
    28. }
    29. int main()
    30. {
    31. test01();
    32. system("pause");
    33. return 0;
    34. }

    结果

     

    3.map大小和交换

    功能描述

    统计map容器大小以及交换map容器

    函数原型

    size();                     //返回容器中元素数目

    empty();                  //判断容器是否为空

    swap(st);                //交换俩个集合容器

    代码

    1. #include
    2. using namespace std;
    3. #include
    4. void printMap(map<int,int>&m)
    5. {
    6. for(map<int,int>::iterator it = m.begin();it != m.end();it++)
    7. {
    8. cout << "key = "<<(*it).first <<" value = " <second << endl;
    9. }
    10. cout<
    11. }
    12. //map容器大小和交换
    13. //大小
    14. void test01()
    15. {
    16. map<int,int>m;
    17. m.insert(pair<int,int>(1,10));
    18. m.insert(pair<int,int>(3,30));
    19. m.insert(pair<int,int>(2,20));
    20. if(m.empty())
    21. {
    22. cout<<"m为空"<
    23. }
    24. else
    25. {
    26. cout<<"m不为空"<
    27. cout<<"m大小为:"<size()<< endl;
    28. }
    29. }
    30. void test02()
    31. {
    32. map<int,int>m;
    33. m.insert(pair<int,int>(1,10));
    34. m.insert(pair<int,int>(3,30));
    35. m.insert(pair<int,int>(2,20));
    36. map<int,int>m2;
    37. m2.insert(pair<int,int>(4,100));
    38. m2.insert(pair<int,int>(5,200));
    39. m2.insert(pair<int,int>(6,300));
    40. cout<< "交换前:" <
    41. printMap(m);
    42. printMap(m2);
    43. //交换
    44. m.swap(m2);
    45. cout<< "交换后:" <
    46. printMap(m);
    47. printMap(m2);
    48. }
    49. int main()
    50. {
    51. test01();
    52. test02();
    53. }

    结果

     

    4 map插入和删除

    功能描述

     map容器进行插入数据和删除数据

    函数原型

    insert(elem);          //在容器中插入元素。
    clear();                  //清除所有元素
    erase( pos);          //删除pos迭代器所指的元素,返回下一个元素的迭代器。
    erase(beg,end);   //删除区间[beg,end)的所有元素,返回下一个元素的迭代器。
    erase( key ) ;       //删除容器中值为key的元素。

     

    代码

    1. #include
    2. using namespace std;
    3. #include
    4. //map容器插入和删除
    5. void printMap(map<int,int>&m)
    6. {
    7. for(map<int,int>::iterator it = m.begin();it != m.end();it++)
    8. {
    9. cout << "key = "<<(*it).first <<" value = " <second << endl;
    10. }
    11. cout<
    12. }
    13. void test01()
    14. {
    15. map<int,int>m;
    16. //插入
    17. //第一种
    18. m.insert(pair<int,int>(1,10));
    19. //第二种
    20. m.insert(make_pair(2,20));
    21. //第三种
    22. m.insert(map<int,int>::value_type(3,30));
    23. //第四种
    24. m[4] = 40;
    25. //[]不建议插数
    26. // cout<
    27. printMap(m);
    28. //删除
    29. m.erase(m.begin());
    30. printMap(m);
    31. //删除重载版本
    32. m.erase(3);
    33. printMap(m);
    34. //删除区间
    35. m.erase(m.begin(),m.end());
    36. printMap(m);
    37. }
    38. int main()
    39. {
    40. test01();
    41. system("pause");
    42. return 0;
    43. }

    结果

     

    5. map查找和统计

    功能描述

    对map容器进行查找数据以及统计数据

    函数原型

    find(key);       //查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
    count(key);     //统计key的元素个数

    代码 

    1. #include
    2. using namespace std;
    3. #include
    4. //map容器查找和统计
    5. void printMap(map<int,int>&m)
    6. {
    7. for(map<int,int>::iterator it = m.begin();it != m.end();it++)
    8. {
    9. cout << "key = "<<(*it).first <<" value = " <second << endl;
    10. }
    11. cout<
    12. }
    13. void test01()
    14. {
    15. map<int,int>m;
    16. m.insert(pair<int,int>(1,10));
    17. m.insert(pair<int,int>(3,30));
    18. m.insert(pair<int,int>(2,20));
    19. m.insert(pair<int,int>(4,40));
    20. //查找
    21. map<int,int>::iterator pos = m.find(3);
    22. if(pos != m.end())
    23. {
    24. cout<<"查找了元素key = "<first<<" value = "<second <
    25. }
    26. else
    27. {
    28. cout<< "未找到元素" <
    29. }
    30. //统计
    31. //map不允许重复的key元素,count结果要么是0要么1
    32. //multimap的count统计可能大于1
    33. int num = m.count(3);
    34. cout<< "num = "<
    35. }
    36. int main()
    37. {
    38. test01();
    39. system("pause");
    40. return 0;
    41. }

    结果

     


    6 map容器排序


    学习目标

     map容器默认排序规则为按照key值进行从小到大排序,掌掘如何改变排序规则


    主要技术点

    利用仿函数,可以改变排序规则

     

    代码

    1. #include
    2. using namespace std;
    3. #include
    4. //map排序
    5. class MyCompare
    6. {
    7. public:
    8. bool operator()(int v1,int v2)
    9. {
    10. //降序
    11. return v1> v2 ;
    12. }
    13. };
    14. void printMap(map<int,int,MyCompare>&m)
    15. {
    16. for(map<int,int>::iterator it = m.begin();it != m.end();it++)
    17. {
    18. cout << "key = "<<(*it).first <<" value = " <second << endl;
    19. }
    20. cout<
    21. }
    22. void test01()
    23. {
    24. map<int,int,MyCompare>m;
    25. m.insert(pair<int,int>(1,10));
    26. m.insert(pair<int,int>(3,30));
    27. m.insert(pair<int,int>(2,20));
    28. m.insert(pair<int,int>(4,40));
    29. m.insert(pair<int,int>(5,50));
    30. printMap(m);
    31. }
    32. int main()
    33. {
    34. test01();
    35. system("pause");
    36. return 0;
    37. }

    结果

     

  • 相关阅读:
    【高速数字化仪应用案例系列】虹科数字化仪在通信领域的应用
    SAP 采购订单行项目屏幕增强(BADI)
    .NET MAUI Sqlite程序应用-数据库配置(一)
    验证计划的内容
    助力物流业发展2024长三角快递物流供应链与技术装备展于四月召开
    【App自动化测试】(一)Appium和移动端自动化
    SQL注入之宽字节注入、堆叠注入、二次注入
    【gradle】通过 toml 管理 classifier 的写法
    基本数据类型的包装类
    亚马逊运营一定要用动/静态住宅IP代理吗?
  • 原文地址:https://blog.csdn.net/qq_64691289/article/details/128167231