• 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] 时,如果健的类型是自定义类型,需要确保该类型已经实现了合适的默认构造函数,以便在键不存在时能够插入默认值.

  • 相关阅读:
    印尼医疗龙头企业Halodoc的数据平台转型之数据平台V2.0
    8.1标识框架
    健身房管理系统
    【Game Of AutoTest】1、再度启程,重识游戏自动化测试
    《数理统计》第4章
    RabbitMQ 安装登陆 提示:User can only log in via localhost
    从一个 issue 出发,带你玩图数据库 NebulaGraph 内核开发
    【最佳实践】CentOS7.9 下绿色安装最新版本的 Tomcat-10.1.2 以及最新的 Java19
    c语言内存函数
    可编程数据平面(论文阅读)
  • 原文地址:https://blog.csdn.net/qq_46237746/article/details/133253920