• C++ map / multimap容器


    目录

    1. map基本概念

    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容器进行构造和赋值操作

    函数原型:

            构造:

             赋值:

    示例:

    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 = " << it->second << endl;
    9. }
    10. }
    11. void test01()
    12. {
    13. //创建map容器
    14. map<int, int> m;
    15. //插入键值
    16. m.insert(pair<int, int>(1, 10));
    17. m.insert(pair<int, int>(4, 40));
    18. m.insert(pair<int, int>(2, 20));
    19. m.insert(pair<int, int>(3, 30));
    20. printMap(m);
    21. }
    22. int main() {
    23. test01();
    24. system("pause");
    25. return 0;
    26. }

    结果:(可以看到结果已经是按照key排好序的)

     

    拷贝构造:

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

    等号赋值:

    1. map<int, int>m3;
    2. m3 = m;
    3. printMap(m3);

    3. map大小和交换

    功能:统计map容器大小以及交换map容器

    函数原型:

     判断是否为空:

    1. if (m.empty())
    2. {
    3. }
    4. else
    5. {
    6. }

    交换:

    m.swap(m2);

    4. map插入和删除

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

    函数原型:

     插入数据的4种方式:

    1. map<int, int> m;
    2. //第一种插入键值的方式
    3. m.insert(pair<int, int>(1, 10));
    4. //第二种
    5. m.insert(make_pair(2, 20));
    6. //第三种
    7. m.insert(map<int, int>::value_type(3, 30));
    8. //第四种
    9. m[4] = 40;

    删除:

    1. //删除第一个键值对
    2. m.erase(m.begin);
    3. //删除键为1的键值对
    4. m.erase(1);
    5. //按照区间删除
    6. m.erase(m.begin(), m.end());

    清空:

    m.clear();

    5. map查找和统计

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

    函数原型:

    示例:

    查找:

    1. #include
    2. using namespace std;
    3. #include
    4. void test01()
    5. {
    6. //创建map容器
    7. map<int, int> m;
    8. //插入键值
    9. m.insert(pair<int, int>(1, 10));
    10. m.insert(pair<int, int>(4, 40));
    11. m.insert(pair<int, int>(2, 20));
    12. m.insert(pair<int, int>(3, 30));
    13. map<int, int>::iterator pos = m.find(3);
    14. if (pos != m.end())
    15. {
    16. cout << "查到了元素key = " << (*pos).first << " value = " << pos->second << endl;
    17. }
    18. else
    19. {
    20. cout << "未找到元素" << endl;
    21. }
    22. }
    23. int main() {
    24. test01();
    25. system("pause");
    26. return 0;
    27. }

    结果:

     统计:

    1. //统计key为1的键值对个数
    2. int num = m.count(1);

    6. map容器排序

    map容器默认排序规则为按照key值进行从小到大排序,因此需掌握如何利用仿函数改变排序规则

    按照key降序排列: 

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

    结果:

  • 相关阅读:
    时间序列-ARIMA
    AIGC创作系统ChatGPT源码,AI绘画源码,支持最新GPT-4-Turbo模型,支持DALL-E3文生图
    Vuex
    CSS伪元素详解以及伪元素与伪类的区别
    Nomad 系列-Nomad+Traefik+Tailscale 集成实现零信任安全
    【Verilog基础】“与/或/非”门级电路实现“2选1MUX”、“4选1MUX”、“8选1MUX”、“异或门”、“半加器”
    同比增长29.89%,长城汽车9月销售新车超12万辆
    java spring cloud 企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展
    2.1_2进程的状态与转换
    Dart 3.5 更新详解
  • 原文地址:https://blog.csdn.net/ChaoChao66666/article/details/127120694