• map容器


    1. map容器的构造函数和赋值操作

    由于map容器中存储的数据都是成对出现的,因此我们需要使用pair来帮助我们完成存储

    1.1 构造函数

     

    这里我们只考虑拷贝构造

    1. int main()
    2. {
    3. //map容器中的数据都是成对出现的,插入的数据必须是对组
    4. map<string, int>m;
    5. m.insert(pair<string, int>("张三", 18));
    6. m.insert(pair<string, int>("李四", 28));
    7. m.insert(pair<string, int>("王五", 17));
    8. m.insert(pair<string, int>("赵二", 32));
    9. Print(m);
    10. cout << "------------" << endl;
    11. //拷贝构造
    12. map<string, int>m1(m);
    13. Print(m1);
    14. return 0;
    15. }

    1.2 赋值操作

    使用 = 来帮助我们完成赋值

    1. int main()
    2. {
    3. //map容器中的数据都是成对出现的,插入的数据必须是对组
    4. map<string, int>m;
    5. m.insert(pair<string, int>("张三", 18));
    6. m.insert(pair<string, int>("李四", 28));
    7. m.insert(pair<string, int>("王五", 17));
    8. m.insert(pair<string, int>("赵二", 32));
    9. Print(m);
    10. //赋值拷贝
    11. cout << "------------" << endl;
    12. map<string, int>m2;
    13. m2 = m;
    14. Print(m2);
    15. return 0;
    16. }

    2. map容的大器小和交换

    2.1 大小的计算

    这里我们使用容器中的size函数,它将返回map容器中的元素个数

    1. void Print(const map<int, int>& m)
    2. {
    3. for (auto i = m.begin(); i != m.end(); i++)
    4. {
    5. cout << i->first << " " << i->second << endl;
    6. }
    7. }
    8. //大小计算
    9. void test01()
    10. {
    11. map<int, int>m1;
    12. for (int i = 0; i < 5; i++)
    13. {
    14. m1.insert(pair<int, int>(i, i));
    15. }
    16. Print(m1);
    17. if (m1.empty())
    18. {
    19. cout << "map容器为空" << endl;
    20. }
    21. else
    22. {
    23. cout << "map容器不为空" << endl;
    24. cout << "容器的大小是:" << m1.size() << endl;
    25. }
    26. }
    27. int main()
    28. {
    29. test01();
    30. return 0;
    31. }

     2.2 容器的交换

     swap可以交换两个容器的空间

    1. void Print(const map<int, int>& m)
    2. {
    3. for (auto i = m.begin(); i != m.end(); i++)
    4. {
    5. cout << i->first << " " << i->second << endl;
    6. }
    7. }
    8. //交换操作
    9. void test02()
    10. {
    11. map<int, int>m1;
    12. for (int i = 0; i < 5; i++)
    13. {
    14. m1.insert(pair<int, int>(i, i));
    15. }
    16. Print(m1);
    17. map<int, int>m2;
    18. for (int i = 0; i < 3; i++)
    19. {
    20. m2.insert(pair<int, int>(i + 3, i + 3));
    21. }
    22. cout << "--------------" << endl;
    23. Print(m2);
    24. cout << "交换后" << endl;
    25. m1.swap(m2);
    26. Print(m1);
    27. cout << "--------------" << endl;
    28. Print(m2);
    29. }
    30. int main()
    31. {
    32. test02();
    33. return 0;
    34. }

     3. map容器的插入和删除

    3.1 map容器的插入

     这里我们主要考虑map容器插入数据的方式:

    第一种

    m.insert(pair<int, int>(1, 10));

    第二种

    m.insert(make_pair(2, 20));

    第三种

    m.insert(map<int, int>::value_type(3, 30));

    第四种

    m[4] = 40;

    添加后的结果:

     因为map容器会将插入的值根据键值来进行排序,因为我们只考虑插入的方式即可,不考虑插入位置等

    3.2 map容器的删除

    1. void Print(const map<int, int>& m)
    2. {
    3. for (auto i = m.begin(); i != m.end(); i++)
    4. {
    5. cout <<"key = "<< i->first << " value = " << i->second << endl;
    6. }
    7. }
    8. void test01()
    9. {
    10. map<int, int>m;
    11. //第一种
    12. m.insert(pair<int, int>(1, 10));
    13. //第二种
    14. m.insert(make_pair(2, 20));
    15. //第三种
    16. m.insert(map<int, int>::value_type(3, 30));
    17. //第四种
    18. m[4] = 40;
    19. Print(m);
    20. cout << endl;
    21. //1.按照迭代器删除
    22. m.erase(m.begin());
    23. Print(m);
    24. cout << endl;
    25. //2.删除键值为3
    26. m.erase(3);
    27. Print(m);
    28. cout << endl;
    29. //3.删除区间[m.begin(),m.end())的所有值
    30. m.erase(m.begin(), m.end());
    31. Print(m);
    32. }
    33. int main()
    34. {
    35. test01();
    36. return 0;
    37. }

     删除后的结果:

     4. map容器的查找和统计

    4.1 map容器的查找

     如果找到查找的元素,则返回该元素的迭代器,否则返回map::end

    1. void test01()
    2. {
    3. map<int, int>m;
    4. m.insert(make_pair(1, 10));
    5. m.insert(make_pair(2, 20));
    6. m.insert(make_pair(3, 30));
    7. auto p = m.find(55);
    8. if (p == m.end())
    9. {
    10. cout << "没有找到" << endl;
    11. }
    12. else
    13. {
    14. cout << "first = " << p->first << " second = " << p->second;
    15. }
    16. p = m.find(3);
    17. if (p == m.end())
    18. {
    19. cout << "没有找到" << endl;
    20. }
    21. else
    22. {
    23. cout << "first = " << p->first << " second = " << p->second;
    24. }
    25. }
    26. int main()
    27. {
    28. test01();
    29. return 0;
    30. }

    运行结果如下:

     4.2 map容器的统计

     查找键值k是否存在,如果存在则返回1,不存在则返回0

    1. void test01()
    2. {
    3. map<int, int>m;
    4. m.insert(make_pair(1, 10));
    5. m.insert(make_pair(2, 20));
    6. m.insert(make_pair(3, 30));
    7. cout << m.count(3) << endl;
    8. cout << m.count(5) << endl;
    9. }
    10. int main()
    11. {
    12. test01();
    13. return 0;
    14. }

    运行结果如下:

     

  • 相关阅读:
    前端实现Base64图片压缩(可直接复制使用)
    六一,用前端做个小游戏回味童年
    算法设计与分析复习(一)
    【Java 基础篇】Java 对象序列化流详解
    GO微服务实战第二十二节 案例:如何通过 Service Meh 实现熔断和限流?
    自满型性格分析,如何改变自满型性格?
    Vue自定义指令
    云上大数据存储:探究 JuiceFS 与 HDFS 的异同
    C++ 虚函数表
    我的创作纪念日
  • 原文地址:https://blog.csdn.net/Rinki123456/article/details/125546428