QMultimap遍历

qt中QMap与QMultimap用foreach遍历 引言 若只是单独的遍历容器,不修改容器中元素的值,可以使用foreach来实现,比使用迭代器来遍历元素更简洁,使用foreach迭代器是创建了原来容器的副本,所有不能修改容器中数据。下面看两个示例。 示例 示例一 遍历QMap容器中的参数: QMap<QString,int> map; foreach(const QString str,map.keys()) { qDebug()<<str<<":"<<map.value(str); } 示例二 遍历QM 阅读详情

遍历QMultimap

提示:QMultimap和Qmap的遍历存在不同的地方,也是一个大坑:


我们先看正常情况的显示

提示:看下面的代码,正常情况下的Qmap和QMulitmap是完全没问题的:

  QMap<QString,QString> map;
    map.insert("1","123");
    map.insert("2","321");
    map.insert("3","321");
    map.insert("4","321");
    for ( auto key:  map.keys()){
        qDebug()<<"正常情况下的容器遍历结果:"<<map.value(key);  // value值正常显示
    }
    
  QMultiMap<QString,QString> mlist;
    mlist.insert("1","123");
    mlist.insert("1","321");
    mlist.insert("1","321");
    mlist.insert("2","321");
    mlist.insert("2","456");
    qDebug()<<mlist.keys();     // QList("1", "1", "1", "2", "2")  同样没有问题

接下来进入主题

提示:当两个QMulitmap想要对比内容时,我们需要通过遍历来实现,但是QMultimap的遍历存在一个大坑。

 QList<QString> listKeys = mlist.keys();
    for ( auto key:  listKeys){
        qDebug()<<mlist.value(key);     // 结果是 321,321,321,456,456 可能有人会问为什么?
        // 难道不应该是123,321,321,321,456吗?
    }

原因分析:

提示:原因很简单,因为相同的key,value做了追加.
也就是说key=1时,mlist.keys(1) 所产生的结果QList()包含的不是当前value,而是所有key=1的value即QList(321,321,321,123)
同理key = 2时,值为QList(456,321)
所以QMultimap存在相同key时的遍历想得到当前对应的value值就不能通过这种方式进行遍历了。

再看下一个:

 QMultiMap<QString,QString> mlist;
    mlist.insert("1","123");
    mlist.insert("1","321");
    mlist.insert("1","321");
    mlist.insert("2","321");
 for (auto value: mlist.values()){
        qDebug()<<  "key="<<mlist.key(value) << "value = "<<value;  //看到这你会发现结果是一样的。
        // 你会问为什么?因为还有一个mlist.keys("321")的结果是2呢,为什么不显示?
        // 答案:和上面说的一样,mlist.keys("321")的结果是QList(1,2),至于为什么显示的是1,那是因为默认显示首个值。也就是mlist.keys("321").at(0)的值
    }
 qDebug()<<  "key="<<mlist.keys("321");  //key= QList("1","1","2")

输出结果
key= “1” value = “321”
key= “1” value = “321”
key= “1” value = “123”
key= “1” value = “321”
key= QList(“1”, “1”, “2”)


解决方案:

提示:我们应该怎样才能按照正常的顺序进行遍历显示呢?
我们先看下正常的输出显示结果:

for ( int i = 0; i < mlist.keys().count();i++){
        qDebug()<<mlist.keys().at(i)<<"values:\t"<<mlist.values( mlist.keys().at(i));        
    }

输出结果如下:
“1” values: QList(“321”, “321”, “123”)
“1” values: QList(“321”, “321”, “123”)
“1” values: QList(“321”, “321”, “123”)
“2” values: QList(“456”, “321”)
“2” values: QList(“456”, “321”)

我们想要的结果

QList<QString> list=mlist.keys();  //去重,去除容器中,相同的key
list.erase( std::unique(list.begin(),list.end()),list.end());
for ( int i = 0; i < list.count(); ++i){               //所以正常情况下可以通过这种方式进行 具有相同key的QMulitmap的遍历
        qDebug()<<list.at(i)<<"values:\t"<<mlist.values(list.at(i));
        QString strkey = list.at(i);
        QList<QString> strKeyValueList = mlist.values( strkey);
        for ( int j = 0; j < strKeyValueList.count(); ++j){
            QString strKeyValue = strKeyValueList.at(j);
            qDebug()<<"(key,value)="<<strkey<<","<<strKeyValue;  // //值已经取出,具体逻辑根据实际情况而定
        }
    }

输出结果:
“1” values: QList(“321”, “321”, “123”)
(key,value)= “1” , “321”
(key,value)= “1” , “321”
(key,value)= “1” , “123”
“2” values: QList(“456”, “321”)
(key,value)= “2” , “456”
(key,value)= “2” , “321”

至于具体的逻辑可以根据自己的需求进行细化,感谢支持,加油!

Qt开发总结(5)——Qt中的容器 C++的标准模板库(STL)中定义了一系列容器,并对应有若干容器类和操作容器用到的迭代器(这部分内容可参见本人博客《C++学习笔记——STL标准模板库》)。Qt自定义了几个容器类,这些容器类同样是基于模板的,可以实例化为具体的数据类型。相比于STL中的容器,Qt中的容器更加轻巧、安全和便于使用,而且进行了速度和存储优化,另外,它们还是线程安全的,可以作为只读容器被多个线程访问。 与STL类似,Q... 阅读详情

相关推荐

QT STL容器QMap【增、删(两种方式)、改、查、遍历(三种方式)、清除】

QMap 【1】UI按钮 【2】UI按钮槽函数 【3】Qmap 输出结果

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 5023

QMultiMap使用详解

`QMultiMap` 是 Qt 提供的一个容器类,用于存储键值对,其中一个键可以对应多个值。它是基于 `QMap` 实现的,支持快速查找和插入操作。`QMultiMap` 的主要用途是在需要存储具有相同键的多个值时,提供便捷的操作接口。

啊渊的专栏 2517

使用C++的QMultiMap类

与QMap类似,QMultiMap也是基于红黑树实现的,但与QMap不同的是,QMultiMap允许多个键对应相同的值。由于QMultiMap允许多个键对应相同的值,因此可以多次插入相同的键,每次插入都会将键-值对添加到QMultiMap中。由于QMultiMap允许多个键对应相同的值,因此value()函数返回一个QList对象,其中包含了所有与指定键对应的值。可以使用迭代器对QMultiMap进行遍历,获取所有的键-值对。可以使用remove()函数删除QMultiMap中指定的键-值对。

PixelProX的博客 159

qt之QMutiMap遍历

遍历方法思想,使用map遍历,已知遍历的key值对应value个数 QMutiMap生成代码示例 #include &lt;QMultiMap&gt; QMutimap&lt;QString,QString&gt; m_job_total_status_mutimap; QMutimap&lt;QString,QString&gt; set_job_mutimap() { m_job...

a287730887的专栏 4677

Qt入门教程【STL篇】QMultiMap键值存储类

Qt中多键值对类QMultiMap的用法

小鱼酱的博客 1717

QT的QMultiMap类的使用

详细说明 QMultiMap类是提供多值地图的便捷QMap子类。 QMultiMap <Key,T>是Qt的通用容器类之一。它继承了QMap并扩展了一些便利功能,使其比QMap更适合于存储多值地图。多值映射是允许使用同一键的多个值的映射。 QMap通常不允许这样做,除非您调用QMap :: insertMulti()。 由于QMultiMap继承了QMap,因此QMap的所有功能也适用于QMultiMap。例如,可以使用isEmpty()测试地图是否为空,并且可以使用QMap的迭代器类(例如QM

希望我的博客,能帮上你解决学习中工作中所遇到的问题 3247

QT foreach遍历QList-QMap-QMultiMap

QT foreach遍历QList-QMap-QMultiMap。

Txwtech 415

使用QMultiMap类管理数据

QMultiMap是Qt中的一个容器类,它可以存储多个值对应一个键的情况,相当于一个键对应一个多个value的情况。这里,我们插入了三个元素,fruit键对应了两个值(apple和orange),而vegetable键对应了一个值(carrot)。以上是QMultiMap的一些基本用法,通过这些方法,我们可以方便地管理数据。可以看到,我们输出了所有的键,其中fruit出现了两次。可以看到,我们输出了所有的值,按照插入的顺序输出。这里,我们删除了键为fruit对应的所有值。使用QMultiMap类管理数据。

. 386

QMultiMap Class

深入剖析 Qt QMultiMap :原理、应用与技巧

ken2232的博客 806

Qt中QMap和QMultimap使用

QMap 是Qt的通用容器类之一。它存储(键,值) 对,并提供与键相关联的值的快速查找。其实就是一个键值对的集合,经常使用的。具体更详细还得看看帮助文档 QMap/QMultiMap属于关联式容器,其底层结构是通过二叉树实现,故其查找value的效率很快。QMap中的数据都是成对出现的,第一个称为key(键),第二个称value(键值)。

多思计算机组成原理实验:模型机课程设计

计算机组成原理实验教程 基于多思网络虚拟实验系统 张雯雰

Nick的博客 2万+

Qt扫盲-QMultiMap理论总结

QMultiMap 是Qt的通用容器类之一。它继承至于QMap并扩展了QMap的功能,用户可以使用isEmpty()来测试map是否为空,也可以使用QMap的迭代器类(例如QMapIterator)来遍历QMultiMap。除此之外,它还提供了一个与QMap::insertMulti()对应的insert()函数,以及一个与QMap::insert()对应的replace()函数。它还提供了方便的+()运算符和+=()运算符。如果想用某个键访问最近插入的元素,可以使用 value() 或replace()。

洪源兄 1887

JFET放大电路实例设计仿真

参照《晶体管电路设计》中的例子 JFET 2SK184 JFET 2SK184 数据手册如下 电路设计 共源放大 步骤:1、静态工作点 2N4416 1ma 2、RD和RS A=5 5:1 RS 2V /1m=2k RD 5k 3、偏压VG 根据传输特性 VGS-ID vgs=-0.7 vg=2-0.7=1.3 400k^2/50k...

f的博客 7441

Qt项目里QMap的5个“坑”与高效用法:从遍历优化到QMultiMap实战避雷指南

本文深入探讨Qt项目中QMap的5个高阶陷阱与性能优化方案,包括遍历性能对比、insert()的隐蔽行为、反向查找的陷阱、QMultiMap与QMap的选型决策以及自定义类型作为Key的解决方案。通过实测数据和代码示例,帮助开发者避免常见错误并提升QMap的使用效率。

weixin_26854555的博客 175

华为ENSP完整安装教程

华为ENSP完整安装教程

Hnm456756的博客 7335

c++实现异步线程池并详细分析线程池析构流程

多线程编程是提高程序性能和响应能力的关键技术之一,异步线程池作为多线程编程的一种有效实现方式,能够管理和复用线程资源,避免频繁创建和销毁线程带来的开销。在本文中,我们将深入探讨如何实现一个异步线程池。

2301_76564925的博客 1599

QMultiMap与QMultiHash一对多映射

QMultiMap <int,QString> map; map[3]="Hello"; map.insert(3,"World");

没用的阿吉 929

【以太网硬件十二】以太网端口自协商过程解密之二

简述以太网端口自协商的过程

highman110的博客 2489

QMap的使用(插入、取值、删除、遍历)

QMap的使用(插入、取值、删除、遍历)

hw5230的博客 3639

【WRFDA实操第一期】服务器中安装 WRFPLUS 和 WRFDA

【WRFDA实操第一期】安装 WRFPLUS 和 WRFDA

WW、forever的博客 2037

2026年数字IC设计华为笔试带答案解析

这篇文章是一份数字IC设计工程师笔试的试卷结构和部分题目解析。试卷包含单选题31题(每题2分)、多选题10题(每题4分)和简答/编程题4题(每题7分),总分130分,考试时长120分钟。 摘要重点: 试卷涵盖数字IC设计的关键知识点,包括Verilog语法、时序逻辑、状态机设计、跨时钟域处理等; 题目解析详细说明了各选项的正确性,如非阻塞赋值特性(D错误)、功耗影响因素(C与组合逻辑级数弱相关)等; 包含实际工程问题,如DDR4接口电平(SSTL-1.2)、卡诺图变量排序(格雷码)等; 部分题目考察基础概念

Open 369

[QT] QMap使用详解

[QT] QMap使用详解 一. 目录 1. 实例化QMap对象 2. 插入数据 3. 移除数据 4. 遍历数据 5. 由键查找对应键值 6. 由键值查找键 7. 修改键值 8. 查找是否包含某个键 9. 获取所有的键和键值 10. 一个键对应多个值 1. 实例化QMap对象 /* 创建QMap实例, 第一个参数为QString类型的键,第二个参数为int类型的值 */ QMap<QString, int> map; 2. 插入数据 /* 插入数据 两种方式*/

qq_39295354的博客 6万+

50、压电微泵与技术设备驱动的研究分析

本文研究了压电微泵在弹性微通道中的流体流动特性及技术设备驱动的振动行为。通过建立轴对称流固耦合模型,利用FreeFem++进行数值模拟,分析了不同数量压电致动器和频率对微泵流量的影响,发现多个致动器按特定时序压缩可产生净正向流量,并提出了稳态流量的近似解析公式。同时,针对技术设备驱动系统,探讨了周期性负载引起的强迫振动特性,明确了共振条件及影响因素,并比较了主动、被动和优化设计等振动控制策略。最后展望了实验验证、多物理场耦合与智能控制等未来研究方向,为相关设备的优化设计与高效运行提供了理论支持。

convnet3designer的博客 148

QMap使用详解

`QMap` 是 Qt 提供的一个模板类,用于存储键值对。默认情况下,`QMap` 可以使用基本数据类型或 Qt 的基本类型(如 `QString`, `int`, `QDate` 等)作为键。但是,如果你需要使用自定义类型作为键,则需要满足一些特定的条件。

啊渊的专栏 3762

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Qt foreach关键字遍历容器

文章目录1.使用示例 1.使用示例 #include <QCoreApplication> #include <QList> #include <QMap> #include <QMultiMap> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QList<QString> list;

超级大洋葱的博客 1536

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: 数据结构 之 哈夫曼树及其应用(八)
下一篇: error LNK2001: 无法解析的外部符号 “public:xxxxxx“
J_admin
博客等级 码龄9年 193粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值