当前位置: 首页 > news >正文

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容器是一个动态数组&#xff0c;可以容纳任意数量的元素,在相邻的内存中存储给定的数据类型作为一组数据,在QVector前部或中间位置插入元素都会导致内存中大量的数据元素移动,这使得操作速度会减慢.可使用迭代器对这组数据进行访问. 和其他的容器类型类似,QVector…...

两线制无源 4-20mA 回路供电隔离变送器

两线制无源 4-20mA 回路供电隔离变送器 一入一出两线制无源 4-20mA 回路供电隔离变送器 概述&#xff1a;JSD TAW-1001D-100L-F 系列隔离变送器是 4-20mA 两线制回路供电的电流隔离变送配电器,该隔离变送器采用电磁隔离技术,并通过输入端馈电方式,给输入端两线制仪器仪表设备供…...

强化学习优质博客记录(随缘更新)

杂记 速成深度强化学习的人可能陷入的几个误区(2023-03更新) DQN DQN表现稳定提升和收敛的技巧集锦 TRPO 如何看懂TRPO里所有的数学推导细节? PPO The 37 Implementation Details of Proximal Policy Optimization强化学习算法中&#xff0c;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:基于微信小程序的消防隐患在线举报系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…...

MES系统需要具备哪些性能方面的需求?

MES系统需要具备哪些“性能需求”&#xff1f;关于这个问题&#xff0c;我觉得有必要先和大家解释一下&#xff0c;到底什么是性能需求&#xff1f;性能需求在MES系统的作用是什么&#xff1f;讲明白了这2点&#xff0c;问题自然而然就解决了。 什么是性能需求&#xff1f; 通…...

数据在内存中的存储(整型篇)

1.辨析原码反码补码&#xff1a; 1.原码&#xff1a;有32位&#xff08;int类四个字节&#xff0c;一个字节八个比特位&#xff09;&#xff0c;第一位是符号位&#xff0c;0正1负&#xff0c;其余为二进制位。 2.计算一般是对原码进行计算&#xff0c;但在负数计算使用原码会导…...

大一作业习题

第一题&#xff1a;答案&#xff1a; #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 作为一种高级编程语言&#xff0c;可以用于开发各种大小的模型。以下是一些常见的 Python 大模型&#xff0c;以及它们的优势、劣势和使用场景&#xff1a; TensorFlow&#xff1a; 优势&#xff1a;TensorFlow 是一个非常流行的深度学习库&#xff0c;具有高度的可扩…...

TCP 和 UDP 区别? 2、TCP/IP 协议涉及哪几层架构? 3、描述下 TCP 连接 4 次挥手的过程?为什么要 4 次挥手?

文章目录 1、TCP 和 UDP 区别&#xff1f;2、TCP/IP 协议涉及哪几层架构&#xff1f;3、描述下 TCP 连接 4 次挥手的过程&#xff1f;为什么要 4 次挥手&#xff1f;4、计算机插上电源操作系统做了什么&#xff1f;5、Linux 操作系统设备文件有哪些&#xff1f; 1、TCP 和 UDP …...

pyside/qt03——人机协同的编程教学—直接面向chatGPT实战开发(做中学,事上练)

先大概有个草图框架&#xff0c;一点点丰富 我纠结好久&#xff0c;直接用Python写UI代码 还是用designer做UI 再转Python呢&#xff0c; 因为不管怎么样都要转成Python代码&#xff0c; 想了想还是学一下designer吧&#xff0c;有个中介&#xff0c;有直观理解。 直接这样也可…...

swing快速入门(五)

注释很详细&#xff0c;直接上代码 上一篇 本篇新增内容&#xff1a; 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用户的操作方法

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Linux》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一…...

设计模式——建造者模式(Java示例)

引言 生成器是一种创建型设计模式&#xff0c; 使你能够分步骤创建复杂对象。 与其他创建型模式不同&#xff0c; 生成器不要求产品拥有通用接口。 这使得用相同的创建过程生成不同的产品成为可能。 复杂度&#xff1a; 中等 流行度&#xff1a; 流行 使用示例&#xff1a…...

深入探索 Spring Boot:简化开发,加速部署的全方位利器

目录 导言 1. 自动配置&#xff08;Auto-Configuration&#xff09; 2. 起步依赖&#xff08;Starter Dependencies&#xff09; 3. 嵌入式 Web 服务器 4. Actuator 5. 外部化配置 6. 简化的安全性配置 7. Spring Boot CLI 8. Spring Boot DevTools 导言 在当今软件开…...

SpectralGPT: Spectral Foundation Model 论文翻译3

遥感领域的通用大模型 2023.11.13在CVPR发表 原文地址&#xff1a;[2311.07113] SpectralGPT: Spectral Foundation Model (arxiv.org) E.消融研究 在预训练阶段&#xff0c;我们对可能影响下游任务表现的各种因素进行了全面研究。这些因素包括掩蔽比、ViT patch大小、数据规…...

ubuntu-c++-可执行模块-动态链接库-链接库搜索-基础知识

文章目录 1.动态链接库简介2.动态库搜索路径3.运行时链接及搜索顺序4.查看可运行模块的链接库5.总结 1.动态链接库简介 动态库又叫动态链接库&#xff0c;是程序运行的时候加载的库&#xff0c;当动态链接库正确安装后&#xff0c;所有的程序都可以使用动态库来运行程序。动态…...

HTML中使用JavaScript实现一个简单的鼠标悬停特效。

代码中&#xff0c;我们首先在CSS中定义了一个红色的方块&#xff0c;然后使用:hover伪类定义了鼠标悬停时的样式。接着&#xff0c;在JavaScript中定义了一个函数showMessage()&#xff0c;用于在控制台输出一条消息。最后&#xff0c;在HTML中使用<div>标签定义了一个i…...

深入.NET平台和C#编程总结大全

第一章 简单认识.NET框架 &#xff08;1&#xff09;首先我们得知道 .NET框架具有两个主要组件&#xff1a;公共语言进行时CLR&#xff08;Common Language Runtime&#xff09;和框架类库FCL&#xff08;Framework Class Library&#xff09; 配图&#xff1a; &#xff08;…...

jOOQ的使用场景

jOOQ的使用场景 jOOQ最初是作为一个库完全是JDBC和所有的数据库交互的抽象层而被创建。 在已有的软件产品中经常遇到的各种最佳实践被应用到这个库中。包含如下&#xff1a; 类型安全数据库对象引用&#xff0c;通过自动生成的模式&#xff0c; 表&#xff0c; 列&#xff0c…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...