• STL map,插入和查找的一些注意事项


    01、前言(废话)

    C++ 的 std::map 容器中插入键值对主要有myMap(std::make_pair(key value)) ,它们的区别你了解吗?

    auto it = myMap,find(key) 和 auto value = myMap[key] 都可以用于在 C++ 的 std::map 容器中查找键对应的值,但是如果auto value = myMap[key]的key不存在时会有什么问题呢?

    下文就详细介绍它们的区别

    02、插入

    C++ 插入主要有:myMap[key] = valuemyMap(std::make_pair(key,value))

    • myMap[key] = value是通过使用提来访问和修改映射中的值,如果键不存在,则会创建一个新的键值对,并将值插入到映射中,如果键已经存在,则会更新对应的值。
    • myMap(std::make_pair(key value))是通过使用 std:pair 来插入键值对,这种式可以在创建键值对的同时进行初始化,并将其插入到映射中,如果键已经存在,则不会进行更新操作
    	map<int, string> myMap;
    	myMap.insert(std::make_pair(10,"abc"));
    	myMap.insert(std::make_pair(10, "abcd"));
    	cout << myMap[10] << endl;
    	
    	
    	myMap[11] = "123";
    	cout << myMap[11] << endl;
    	myMap[11] = "1234";
    	cout << myMap[11] << endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    运行结果

    abc
    123
    1234
    
    • 1
    • 2
    • 3

    可以看到,调用inset方法时,若果该key已经存在,不会更新该key的值,在调用insert函数的时候需要注意。

    03、查看

    C++ 的 std::map 容器中查找键对应的值注意是auto it = myMap.find(key)auto value = myMap[key]

    • auto it = myMap,find(key)使用 find 函数来查找键对应的值,如果键存在,则回一个指向该键值对的法代器,如果键不存在,则返回 myMap.end()。
    • auto value = myMap[key] 使用健来直接访问和获取对应的值,如果键存在,则返回对应的值;如果键不存在,则会创建一个新的键值对,并将默认值插入到映射中.
    map<int, int> myMap1;
    myMap1[2] = 2;
    cout <<"myMap1 size = "<< myMap1.size() << endl;
    int val1 = myMap1[1];
    cout << "val1 = " << val1 << "; myMap1 size = " << myMap1.size() << "; myMap1[2] = " << myMap1[2] << endl;
    cout << "-------------------------------------" << endl;
    
    map<int, int> myMap2;
    myMap2[22] = 22;
    cout << "myMap2 size = " << myMap2.size() << endl;
    auto it1 = myMap2.find(11);
    auto it2 = myMap2.find(22);
    if (it1 == myMap2.end())
        cout << "myMap2 not find 11" << endl;
    if (it2 != myMap2.end())
        cout << "key = " << it2->first << "; value = " << it2->second << endl;
    cout << "myMap2 size = " << myMap2.size() << endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    运行结果

    myMap1 size = 1
    val1 = 0; myMap1 size = 2; myMap1[2] = 2
    -------------------------------------
    myMap2 size = 1
    myMap2 not find 11
    key = 22; value = 22
    myMap2 size = 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意:使用 myMap[key] 时,如果健的类型是自定义类型,需要确保该类型已经实现了合适的默认构造函数,以便在键不存在时能够插入默认值.

  • 相关阅读:
    基于ASP.NET的旅行社信息管理系统设计与实现
    关于#java#的问题,请各位专家解答!
    探索跨境电商产品开发流程的最佳工具
    反编译软件库源码附带独立后台教程
    Anniversary party(树形dp 基础题)
    LLM系列 | 23:多模态大模型:浦语·灵笔InternLM-XComposer解读、实战和思考
    jvm 自带调优工具一览
    Vue 中指令v-bind的补充、v-for的使用,两者的结合使用。
    MySQL小知识:为何从8.0开始取消了MySQL查询缓存
    学生管理系统(Java版)
  • 原文地址:https://blog.csdn.net/qq_46237746/article/details/133253920