qt 容器QVector,QMap,QHash的常见使用与该迭代器的简单介绍
一.
QVector容器是一个动态数组,可以容纳任意数量的元素,在相邻的内存中存储给定的数据类型作为一组数据,在QVector前部或中间位置插入元素都会导致内存中大量的数据元素移动,这使得操作速度会减慢.可使用迭代器对这组数据进行访问.
和其他的容器类型类似,QVector容器的功能也有添加元素append(),删除元素remove(),修改元素replace(),查询contains(),访问.......
vStarts<<"鹿晗"<<"热巴"; //添加(尾部插入)vStarts.append("杨紫"); //头部插入vStarts.prepend("Anglebaby"); //尾部插入vStarts.insert(2,"小明"); //指定位置插入vStarts.replace(2,"迪丽热巴");//替换//删除元素下标为0的元素vStarts.remove(0);//删除某个元素vStarts.removeAll("鹿晗"); //移除所有比较结果相同的元素vStarts.removeAt(0); //移除指定位置的元素vStarts.removeOne("杨紫"); //移除比较结果相同的第一个元素vStarts.clear();删除所有元素qDebug()<<"是否有小明?:"<<vStarts.contains("小明");//查询是否有该元素
使用迭代器访问数据.
1.
java风格迭代器
//java风格只读迭代QVectorIterator<QString> it_sr(vStarts);for(it_sr.toFront();it_sr.hasNext();){qDebug() << it_sr.next();}//java风格读写迭代QMutableVectorIterator<QString> it_srw(vStarts);for(it_srw.toFront();it_srw.hasNext();){QString s = it_srw.next();//方式1.使用QString类型的compare()方法比较字符串.比较结果相同则返回0(假).if(!QString::compare(s,"热巴")){ it_srw.setValue("赵丽颖");}//方式2.//if(s == "热巴"){// it_srw.setValue("赵丽颖");//}}
2.
STL风格迭代器.
//STL读写迭代器QVector<QString>::iterator it_VWR;it_VWR = vStarts.begin();for(;it_VWR != vStarts.end();++it_VWR){*it_VWR = *it_VWR + "好人";qDebug()<<*it_VWR;}//STL只读迭代器QVector<QString>::const_iterator it_VR;it_VR = vStarts.constBegin();for(;it_VR != vStarts.constEnd();++it_VR){qDebug()<<*it_VR;}
二.
容器QMap类型由键(key)值(value)对组成一个元素.通过键key映射到值value.
第一个QString数据类型值是键key,第二个QString数据类型值是值value.一个键对应一个值,以key字母顺序(A~Z)存储数据.
//一个键对应一个值QMap<QString,QString> infoMap;//添加元素infoMap.insert("王祖蓝","163cm"); //方式1infoMap["姚明"] = "226cm"; //方式2infoMap.insertMulti("易烊千玺","173cm"); //方式3.如果映射中已经存在具有相同键的项,则该函数将简单地创建一个新项
通过key找value
qDebug() <<"姚明:" <<infoMap["姚明"]; //226cmqDebug() <<"易烊千玺:" <<infoMap.value("易烊千玺"); //173cm
通过value找key
qDebug()<<"173cm的是谁呢?"<<infoMap.key("173cm"); //易烊千玺
1.
java风格迭代器
与QVector容器迭代器非常类似,打印时要把迭代器位置指向下一个位置.同时打印键值对只能分别把键key和值value写出来,不能把俩个键值对当做一个整体来打印输出.
//java风格只读迭代器QMapIterator<QString,QString> it_r(infoMap);for(it_r.toFront();it_r.hasNext();){//方式1//it_r.next();//qDebug()<<it_r.key() <<":"<<it_r.value();//以key的字母A~Z作为排序的依据.有序存储.//方式2qDebug()<<it_r.next().key() <<":"<<it_r.value();} //java风格读写迭代器QMutableMapIterator<QString,QString> it_rw(infoMap);if(it_rw.findNext("163cm")){ //查找元素it_rw.setValue("163.1cm"); //重新设置元素值value}for(it_rw.toFront();it_rw.hasNext();){it_rw.next();//获取元素qDebug()<<it_rw.key()<<":"<<it_rw.value();}
2.
STL风格迭代器
//STL风格读写迭代器QMap<QString,QString>::iterator it_QWR;it_QWR = wMap1.begin();for(;it_QWR != wMap1.end();++it_QWR){qDebug()<<it_QWR.key()<<it_QWR.value() + "-STL";}//STL风格只读迭代器QMap<QString,QString>::const_iterator it_QR;it_QR = wMap1.constBegin();for(;it_QR != wMap1.constEnd();++it_QR){qDebug()<<it_QR.key()<<it_QR.value() + "-stl";}
3.
前面讲的是一个键对应一个值的情况,下面是一个键对应多个值的情况.
//一个键对应对多个值QMultiMap<QString,QString> wMap1;wMap1.insert("spring","15°C");wMap1.insert("summer","35°C");//一个键key插入多个值valuewMap1.insert("summer","39°C");wMap1.insert("summer","40°C");wMap1.insert("autumn","23°C");wMap1.insert("winter","-5°C");wMap1.insert("winter","-15°C");wMap1.insert("winter","-55°C");wMap1.remove("winter","-55°C"); //删除元素//打印一个键的多个值(键值对).所有winter键key的键值对都会被打印出来qDebug()<<endl<<"winter:"<<wMap1.values("winter");
通过value()函数,参数填写键值key,就能打印所有相同键的值value.即一个键key的对应的多个值value.使用迭代器访问的方式与上面一样.
三.
QHash容器与QMap容器一样,也是使用键值对的方式存储数据,它实现了一个哈希表,通过哈希函数将键映射到值,数据存放无序,任意顺序存储,所以它的存储速度比QMap更快.
//QHash类,数据存放无序QHash<int,QString> moneyHash;moneyHash.insert(1,"一块钱");moneyHash.insert(10,"十块钱");moneyHash.insert(20,"二十块钱"); //方式1moneyHash[50] = "五十块钱"; //方式2moneyHash[100] = "一百块钱";moneyHash.insertMulti(100,"毛爷爷"); //一个键有多个值使用函数insertMulti()插入//该方式让前面key为100的value"一百块钱"会被"毛爷爷"覆盖,insertMulti():一个键多个值会被保存//moneyHash[100] = "毛爷爷";
需要注意的是,如果一个键映射多个值,使用方式2并不能添加一个新的键值对,它只会在同一个键的键值对上,把前面相同键的值覆盖掉.所以使用insertMulti()函数才会添加新的键值对,而不会覆盖原有的键值对.
1.
java风格迭代器
迭代器的使用方式和上面的一样,这里就不一一列举了.
//java风格只读迭代器QHashIterator<int,QString> it_mr(moneyHash);//java风格读写迭代器QMutableHashIterator<int,QString> it_mrw(moneyHash);
2.
STL风格迭代器
由于迭代器的访问方式和前面的QMap类似,就不一一详细说明.
//STL读写迭代器 QHash<int,QString>::iterator it_SWR; //STL只读迭代器QHash<int,QString>::const_iterator it_SR;
all~~
相关文章:
qt 容器QVector,QMap,QHash的常见使用与该迭代器的简单介绍
一. QVector容器是一个动态数组,可以容纳任意数量的元素,在相邻的内存中存储给定的数据类型作为一组数据,在QVector前部或中间位置插入元素都会导致内存中大量的数据元素移动,这使得操作速度会减慢.可使用迭代器对这组数据进行访问. 和其他的容器类型类似,QVector…...
两线制无源 4-20mA 回路供电隔离变送器
两线制无源 4-20mA 回路供电隔离变送器 一入一出两线制无源 4-20mA 回路供电隔离变送器 概述:JSD TAW-1001D-100L-F 系列隔离变送器是 4-20mA 两线制回路供电的电流隔离变送配电器,该隔离变送器采用电磁隔离技术,并通过输入端馈电方式,给输入端两线制仪器仪表设备供…...
强化学习优质博客记录(随缘更新)
杂记 速成深度强化学习的人可能陷入的几个误区(2023-03更新) DQN DQN表现稳定提升和收敛的技巧集锦 TRPO 如何看懂TRPO里所有的数学推导细节? PPO The 37 Implementation Details of Proximal Policy Optimization强化学习算法中,PPO算法是不是就是加了重要…...
RabbitMQ-hello
0. pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0…...
案例044:基于微信小程序的消防隐患在线举报系统
文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…...
MES系统需要具备哪些性能方面的需求?
MES系统需要具备哪些“性能需求”?关于这个问题,我觉得有必要先和大家解释一下,到底什么是性能需求?性能需求在MES系统的作用是什么?讲明白了这2点,问题自然而然就解决了。 什么是性能需求? 通…...
数据在内存中的存储(整型篇)
1.辨析原码反码补码: 1.原码:有32位(int类四个字节,一个字节八个比特位),第一位是符号位,0正1负,其余为二进制位。 2.计算一般是对原码进行计算,但在负数计算使用原码会导…...
大一作业习题
第一题:答案: #include <stdio.h> void sort(int a[], int m) //将数组a的前m个元素(从小到大)排序 {int i 0;for (i 0; i < m - 1; i){int j 0;int flag 1;for (j 0; j < m - 1 - i; j){if (a[j] > a[j 1]){int t 0;t a[j];…...
Python大模型TensorFlow/PyTorch/Scikit-learn/Keras/OpenCV/Gensim
Python 作为一种高级编程语言,可以用于开发各种大小的模型。以下是一些常见的 Python 大模型,以及它们的优势、劣势和使用场景: TensorFlow: 优势:TensorFlow 是一个非常流行的深度学习库,具有高度的可扩…...
TCP 和 UDP 区别? 2、TCP/IP 协议涉及哪几层架构? 3、描述下 TCP 连接 4 次挥手的过程?为什么要 4 次挥手?
文章目录 1、TCP 和 UDP 区别?2、TCP/IP 协议涉及哪几层架构?3、描述下 TCP 连接 4 次挥手的过程?为什么要 4 次挥手?4、计算机插上电源操作系统做了什么?5、Linux 操作系统设备文件有哪些? 1、TCP 和 UDP …...
pyside/qt03——人机协同的编程教学—直接面向chatGPT实战开发(做中学,事上练)
先大概有个草图框架,一点点丰富 我纠结好久,直接用Python写UI代码 还是用designer做UI 再转Python呢, 因为不管怎么样都要转成Python代码, 想了想还是学一下designer吧,有个中介,有直观理解。 直接这样也可…...
swing快速入门(五)
注释很详细,直接上代码 上一篇 本篇新增内容: 1.布局管理器BorderLayout 2.自适应尺寸方法pack() import java.awt.*; public class swing_test_3 {public static void main(String[] args) {Frame framenew Frame("演示BorderLayout");//…...
银河麒麟v10系统SSH远程管理及切换root用户的操作方法
📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Linux》。🎯🎯 🚀无论你是编程小白,还是有一…...
设计模式——建造者模式(Java示例)
引言 生成器是一种创建型设计模式, 使你能够分步骤创建复杂对象。 与其他创建型模式不同, 生成器不要求产品拥有通用接口。 这使得用相同的创建过程生成不同的产品成为可能。 复杂度: 中等 流行度: 流行 使用示例:…...
深入探索 Spring Boot:简化开发,加速部署的全方位利器
目录 导言 1. 自动配置(Auto-Configuration) 2. 起步依赖(Starter Dependencies) 3. 嵌入式 Web 服务器 4. Actuator 5. 外部化配置 6. 简化的安全性配置 7. Spring Boot CLI 8. Spring Boot DevTools 导言 在当今软件开…...
SpectralGPT: Spectral Foundation Model 论文翻译3
遥感领域的通用大模型 2023.11.13在CVPR发表 原文地址:[2311.07113] SpectralGPT: Spectral Foundation Model (arxiv.org) E.消融研究 在预训练阶段,我们对可能影响下游任务表现的各种因素进行了全面研究。这些因素包括掩蔽比、ViT patch大小、数据规…...
ubuntu-c++-可执行模块-动态链接库-链接库搜索-基础知识
文章目录 1.动态链接库简介2.动态库搜索路径3.运行时链接及搜索顺序4.查看可运行模块的链接库5.总结 1.动态链接库简介 动态库又叫动态链接库,是程序运行的时候加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序。动态…...
HTML中使用JavaScript实现一个简单的鼠标悬停特效。
代码中,我们首先在CSS中定义了一个红色的方块,然后使用:hover伪类定义了鼠标悬停时的样式。接着,在JavaScript中定义了一个函数showMessage(),用于在控制台输出一条消息。最后,在HTML中使用<div>标签定义了一个i…...
深入.NET平台和C#编程总结大全
第一章 简单认识.NET框架 (1)首先我们得知道 .NET框架具有两个主要组件:公共语言进行时CLR(Common Language Runtime)和框架类库FCL(Framework Class Library) 配图: (…...
jOOQ的使用场景
jOOQ的使用场景 jOOQ最初是作为一个库完全是JDBC和所有的数据库交互的抽象层而被创建。 在已有的软件产品中经常遇到的各种最佳实践被应用到这个库中。包含如下: 类型安全数据库对象引用,通过自动生成的模式, 表, 列,…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
