首页 > 其他分享 >QMap 下标用法的一个副作用

QMap 下标用法的一个副作用

时间:2024-12-17 09:33:03浏览次数:3  
标签:map 下标 QMap 代码 value 用法 查找 key

    最近使用QMap存储数据,初始代码如下:

    QMap<QString, QString> map;

    map["one"] = "1";

    map["two"] = "2";

    map["three"] = "3";

    之后,需要根据key查找某个map的值,并删除。此时一般会采用遍历QMap,然后比对key是否相同。但当时忽想到直接用下标的方法去QMap中查找,代码如下:

    key = "one";

    QString value = map[key];  // 注意这行代码

    if(value.isEmpty() == false)

        map.remove(key);

    当时的想法是,如果存在这个key,那么value是有值的,如果不存在这个key,那么value是没有值的。跟踪代码也确实如此。但随后发现一个问题:

    1.  如果存在key,那么就从QMap中删掉这个键值对。

    2.  当再次查找这个key时,value为空,代码跳过remove这句代码。

    3.  最后第三次再查找这个key时,问题来了,在第一次查找到key时,删掉的这个键值对竟然又出现了,只不过只有key值,value值是空的。

    排查的过程不多说了,直接说结果:直接返回map[key],可能会有意想不到的行为。如果map包含key是没有异常问题,但map不包含key,此时又

使用map[key]方法返回值,那么会在map中插入一个key的元素,value取默认值。

    正确的做法是,先检查是否包含key,然后再用下标法获取值。

附:查看是否包含key的方法有两种,如下:

方法一:map.count(key),如果含这个key,返回1,不含key的话,返回0

方法二:QMap<QString, QString>::iterator iter = map.find(key): 返回迭代器,如果 iter != map.end() 说明含这个key,否则就不含这个key。

标签:map,下标,QMap,代码,value,用法,查找,key
From: https://www.cnblogs.com/RecreateBySelf/p/18610567

相关文章

  • 鸿蒙Next循环渲染ForEach用法总结
    在鸿蒙Next开发中,ForEach接口用于循环渲染数组类型数据,与容器组件配合使用,可高效构建动态列表等UI元素。以下是ForEach用法的详细总结。一、键值生成规则系统默认规则:若开发者未定义keyGenerator函数,ArkUI框架使用默认函数(item:Object,index:number)=>{returnindex+'......
  • 鸿蒙Next条件渲染用法总结
    在鸿蒙Next开发中,ArkTS提供了强大的渲染控制能力,其中条件渲染(if/else)可根据应用不同状态显示相应UI内容。以下是对其用法的详细总结。一、使用规则1.语句支持支持if、else和elseif语句,可灵活构建条件判断逻辑。2.变量类型if、elseif后的条件语句可使用状态变量(值改变实时......
  • LeetCode 3285 找到稳定山的下标
    问题描述有 n 座山排成一列,每座山都有一个高度。给你一个整数数组 height ,其中 height[i] 表示第 i 座山的高度,再给你一个整数 threshold 。对于下标不为 0 的一座山,如果它左侧相邻的山的高度 严格大于 threshold ,那么我们称它是 稳定 的。我们定义下标为 ......
  • 单元测试中Hamcrest的常见用法
    maven:<groupId>org.hamcrest</groupId><artifactId>hamcrest-core</artifactId><version>1.3</version> 在Spock单元测试框架中,Hamcrest提供了一系列的匹配器方法,用于增强测试断言的表达力和可读性。以下是一些Spock中常用的Hamcrest匹配器方法及其详细介绍:Hamcrest......
  • 【go】gorequest包的使用-post/get等用法
    背景在日常工作中经常需要写一写小工具,比如发送get请求,post请求等,在用python时request包比较方便,在用go时可以使用gorequest包,借鉴了py的request包使用样例GET请求-clientfuncgetRequest(paramsmap[string]string)(string,error){request:=gorequest.New()re......
  • Mybatis Plus 常规用法及其示例
    目录导包pom.xml配置文件修改application.yml启动类修改Mapper层修改注解@TableName("表名")@TableId("数据库中主键字段名","主键策略")@TableField("数据库中字段名")内置方法前置说明条件构造器插入intinsert(Tentity)删除intdeleteById(Serializableid)intd......
  • 【万字长文】 Nmap各种用法,带你玩转Nmap
    免责声明:使用本教程或工具,用户必须遵守所有适用的法律和法规,并且用户应自行承担所有风险和责任。文章目录一、Nmap介绍二、功能概述三、Nmap参数详解四、Nmap用法使用示例常用扫描命令一、Nmap介绍Nmap(“NetworkMapper(网络映射器)”)是一款开放源代码的网......
  • 2024-12-14:K 周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串 word
    2024-12-14:K周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串word和一个整数k,k是n的因数。每次操作可以选择两个下标i和j,使得i和j都可以被k整除,然后用从j开始的长度为k的子串替换从i开始的长度为k的子串。要使得word成为一个K周期字符串,需要进行最少的操作次数......
  • 在易优CMS中,field标签的基本用法是什么?
    在易优CMS中,field标签用于获取channelartlist标签内的字段值。field标签只能在channelartlist标签内部使用,主要用于显示栏目相关的字段值。基本语法如下:html {eyou:channelartlisttypeid='栏目ID'type='son'row='20'}<ahref='{eyou:fieldname='typeurl'/}......
  • BottomSheet组件的用法
    文章目录1.概念介绍2.使用方法3.示例代码我们在上一章回中介绍了AlertDialogWidget相关的内容,本章回中将介绍BottomSheetWidget.闲话休提,让我们一起TalkFlutter吧。1.概念介绍我们在这里说的BottomSheet是一种弹出式窗口,和上一章回中介绍的AlertDial......