Qt 常见容器类用法(一)

目录

QMap类

QHash类

QVector类


QMap类

QMap<key,T>提供一个从类型为Key的键到类型为T的值的映射。通常,QMap存储的数据形式是一个键对应一个值,并且按照键Key的次序存储数据。为了能够支持一键多值的情况,QMap提供QMap<key,T>::insertMulti()和QMap<key,T>::values()函数。QMultiMap类来实例化一个QMap对象

#include <QCoreApplication>#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//QMap类//1.创建QMap示例,第一个参数为QString类型的键,第二个参数为int类型的值QMap<QString,int> qmap;// 插入数据信息,他有两种方式操作qmap["Chinese"]=119;qmap["English"]=120;qmap.insert("Math",115);qmap.insert("Physics",99);qmap.insert("Chemistry",100);qDebug()<<qmap;// 删除数据信息key键qmap.remove("Chemistry");qDebug()<<qmap<<endl;// 遍历QMap类的示例,数据信息// 1.迭代器(java类型的迭代操作)   QMapIterator是Qt框架中用于迭代QMap的迭代器类,它提供了遍历QMap中键值对的功能QMapIterator<QString,int> itr(qmap);while(itr.hasNext())      // 在while循环中,使用hasNext()函数检查是否还有下一个键值对待迭代。{itr.next();            // 调用next()函数将迭代器移动到下一个键值对,并可以通过key()和value()函数获取当前键和值的信息。qDebug()<<itr.key()<<": "<<itr.value();}qDebug()<<endl;// 2.STL类型的迭代  QMap<QString, int>::const_iterator是QMap的常量迭代器类型,用于遍历QMap中的键值对。QMap<QString,int>::const_iterator stritr=qmap.constBegin();   // 通过调用constBegin()函数获取QMap的起始迭代器,并将其赋值给stritr。while(stritr!=qmap.constEnd())  // 在while循环中,使用stritr != qmap.constEnd() 条件判断是否还有下一个键值对待迭代。{qDebug()<<stritr.key()<<":"<<stritr.value();stritr++;}// Key键/T键-->来查找qDebug()<<endl;qDebug()<<"key-->T:"<<qmap.value("Math");qDebug()<<"T-->key:"<<qmap.key(99)<<endl;// 修改键值// 一个键对应一个值,再次调用insert()函数将覆盖之前的值qmap.insert("Math",118);qDebug()<<qmap.value("Math");// 查询是否包含某个键qDebug()<<endl;qDebug()<<"result="<<qmap.contains("Chinese");qDebug()<<"result="<<qmap.contains("Chemistry");// 输出所有QMap实例化:Key键和T值qDebug()<<endl;QList<QString> aKeys=qmap.keys();qDebug()<<aKeys;QList<int> aValues=qmap.values();qDebug()<<aValues;// 一个键对应多个值// 直接使用QMultiMap类来实例化一个QMap对象qDebug()<<endl;QMultiMap<QString,QString> mulmap;mulmap.insert("student","no");mulmap.insert("student","name");mulmap.insert("student","sex");mulmap.insert("student","age");mulmap.insert("student","high");mulmap.insert("student","weight");qDebug()<<mulmap; // 从输出结果可以看出mulmap仍然是一个QMap对象return a.exec();
}

结果如下:

QHash类

QHash<Key,T>具有与QMap几乎完全相同的API。QHash维护者一张哈希表(Hash Table),哈希表的大小与QHash的数据项的数据相适应。QHash以任意的顺序组织它的数据,当存储数据的顺序无关紧要时,建议使用QHash作为存放数据的容器。

#include <QCoreApplication>#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QHash<QString,int> qhash;qhash["key 1"] = 3;qhash["key 2"] = 8;qhash["key 3"] = 4;qhash["key 4"] = 2;qhash.insert("key 3",30);QList<QString> list=qhash.keys();for(int i=0;i<list.length();i++)qDebug()<<list[i]<<","<<qhash.value(list[i]);// QHash内部的迭代器QHashIterator类qDebug()<<endl;QHash<QString,int> hash;hash["key 1"]=33;hash["key 2"]=44;hash["key 3"]=55;hash["key 4"]=66;hash.insert("key 3",100);QHash<QString,int>::const_iterator iterator;for(iterator=hash.begin();iterator!=hash.end();iterator++)qDebug()<<iterator.key()<<"-->"<<iterator.value();return a.exec();
}

结果如下: 

QMap 与 QHash 区别:

  • QHash 与 QMap 的功能差不多,但 QHash 的查找速度更快
  • QMap 是按照键的顺序存储数据,而QHash 是任意顺序存储的
  • QMap的键必须提供 "<" 运算符,而QHash的键必须提供”==“运算符和一个名为qhash()的全局散列函数

QVector类

QVector<T>在相邻的内存当中存储给定数据类型T的一组数值,在一个QVector的前部或者中间位置进行插入操作的速度是很慢的,这是因为这样的操作将导致内存中大量数据被移动,这是由QVector存储数据的方式决定的。

#include <QCoreApplication>#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// QVector<T>是Qt的一个容器类QVector<int> qvr;// 第一种赋值方式qvr<<10;qvr<<20;qvr<<30;qvr<<40;// 第二种赋值方式qvr.append(50);qvr.append(60);qvr.append(70);qvr.append(80);qvr.append(90);qvr.append(100);qDebug()<<"qvr count="<<qvr.count()<<endl;// 遍历所有元素for(int i=0;i<qvr.count();i++)qDebug()<<qvr[i];// 删除qvr容器里面的元素qDebug()<<endl;qvr.remove(0);  // 删除第0个元素for(int i=0;i<qvr.count();i++)qDebug()<<qvr[i];qvr.remove(2,3); // 从第二个元素开始,删除后面3个元素qDebug()<<endl;for(int i=0;qvr.count();i++)qDebug()<<qvr[i];// 判断容器是否包含某个元素qDebug()<<endl;qDebug()<<"result="<<qvr.contains(90);qDebug()<<"result="<<qvr.contains(901)<<endl;return a.exec();
}

结果如下: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/670946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0206作业

TCP&#xff08;传输控制协议&#xff09;和 UDP&#xff08;用户数据报协议&#xff09;是两种常用的网络传输协议。它们之间的主要区别在于&#xff1a; 可靠性&#xff1a;TCP 是一种可靠的传输协议&#xff0c;它提供了数据传输的确认、重传和排序功能。如果数据在传输过程…

分享76个节日PPT,总有一款适合您

分享76个节日PPT&#xff0c;总有一款适合您 76个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1-j7toLaBUBAJbkd85xe4VQ?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

C#验证字符串是否大写、小写,正则表达式vs用Char.IsUpper和Char.IsLower方法遍历字符数组

目录 一、使用的方法 1.正则表达式 2.用Char.IsUpper或Char.IsLower方法 二、源代码 1.源码 2.生成效果 一、使用的方法 1.正则表达式 正则表达式“^[A-Z]$”&#xff0c;其中[A-Z]表示匹配一个到多个大写字母。 正则表达式“^[a-z]$”&#xff0c;其中[a-z]表示匹配一个…

EasyExcel下载带下拉框和批注模板

EasyExcel下载带下拉框和批注模板 一、 代码实现 controller下载入口 /***下载excel模板* author youlu* date 2023/8/14 17:31* param response* param request* return void*/PostMapping("/downloadTemplate")public void downloadExcel(HttpServletResponse r…

Mysql-数据库优化-客户端连接参数

客户端参数 原文地址 # 连接池配置 # 初始化连接数 spring.datasource.druid.initial-size1 # 最小空闲连接数&#xff0c;一般设置和initial-size一致 spring.datasource.druid.min-idle1 # 最大活动连接数&#xff0c;一个数据库能够支撑最大的连接数是多少呢&#xff1f; …

javaEE - 23( 21000 字 Servlet 入门 -1 )

一&#xff1a;Servlet 1.1 Servlet 是什么 Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app. 构建动态页面的技术有很多, 每种语言都有一些相关的库/框架来做这件事&#xff0c;Servlet 就是 Tomcat 这个 HTTP…

[第五天】C++继承:单继承、多继承、菱形继承和虚继承的深度解析

一、单继承 1、概述 C最重要的特征是代码重用&#xff0c;通过继承机制可以利用已有的数据类型来定义新的数据类型&#xff0c;新的类不仅拥有旧类的成员&#xff0c;还拥有新定义的成员。 例如一个B类继承于A类&#xff0c;或称从类A派生类B。这样的话&#xff0c;类A成为基类…

【Qt】常见问题

1.存在未解析的标识符 将build文件夹删掉重新编译。 2.左侧项目目录栏无法删除已添加项目 打开目标项目上一级的pro文件&#xff0c;将目标文件名字注释或者删除掉&#xff0c;最后保存&#xff0c;qt就会自动更新&#xff0c;将该项目隐藏掉。 3.在qt creator下添加槽函数…

模拟串口LV2,解决硬件串口资源不足问题!!!!

模拟串口通信 2.0 版本&#xff01;&#xff01; 我在前面的文章里面有写了 虚拟串口通信&#xff0c;虽然说能用&#xff0c;但是用过的小伙伴都说 “好!” 优缺点: 先说一点&#xff0c;2.0版本并不适用于同硬件串口的所有场合&#xff0c;仅仅针对自己开发的电子垃圾的主…

[office] 网优必备的10大经典函数公式! #知识分享#媒体

网优必备的10大经典函数公式! Excel软件看似简单&#xff0c;其实花样很多&#xff0c;尤其Excel表格。但其实只要用心多练&#xff0c;效率轻松提升个十倍百倍真不是问题!赶紧一起来get新技能吧~ ▋函数公式一 我们都知道从网管中查询出来的经纬度是没有小数点的。我看到不…

护眼灯色温多少合适?推荐五款合适色温的护眼台灯

很多人在购买台灯之后只会根据周围环境灯光的明暗调节亮度&#xff0c;对于色温的了解并不多&#xff0c;不知道色温应该调节到什么数值比较合适&#xff0c;有些人也根本没有意识到色温在影响人情绪方面起着重要作用&#xff0c;接下来就一起来看一下色温的标准。 一、什么色…

Day4.

单链表 #include <head.h>typedef struct List{int value;struct List *pointe; }*list; list create_space() {list s(struct List *)malloc(sizeof(struct List)); //向堆区申请空间s->pointe NULL;//初始化s->value 0;return s; } list inserhead_list(lis…

AI改编游戏大电影《使命召唤:幽灵重生》(下)

AI改编游戏大电影《使命召唤&#xff1a;幽灵重生》&#xff08;下&#xff09; 幽灵重生携生化武器毁灭人类&#xff0c;普莱斯上尉点上雪茄拿起武器&#xff0c;英雄再次迎来使命的召唤&#xff01; 《使命召唤&#xff1a;幽灵重生》&#xff08;下&#xff09;&#xff1a…

电力负荷预测 | 基于TCN的电力负荷预测(Python)———结果比对

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力负荷预测 | 基于TCN的电力负荷预测(Python)———结果比对 python3.8 keras2.6.0 matplotlib3.5.2 numpy1.19.4 pandas1.4.3 tensorflow==2.6.0

【宝藏系列】嵌入式入门概念大全

【宝藏系列】嵌入式入门概念大全 0️⃣1️⃣操作系统&#xff08;Operating System&#xff0c;OS&#xff09; 是管理计算机硬件与软件资源的系统软件&#xff0c;同时也是计算机系统的内核与基石。操作系统需要处理管理与配置内存、决定系统资源供需的优先次序、控制输入与输…

jquery写表格,通过后端传值,并合并单元格

<!DOCTYPE html> <html> <head><title>Table Using jQuery</title><style>#tableWrapper {width: 100%;height: 200px; /* 设置表格容器的高度 */overflow: auto; /* 添加滚动条 */margin-top: -10px; /* 负的外边距值&#xff0c;根据实际…

NLP_神经概率语言模型(NPLM)

文章目录 NPLM的起源NPLM的实现1.构建实验语料库2.生成NPLM训练数据3.定义NPLM4.实例化NPLM5.训练NPLM6.用NPLM预测新词 NPLM小结 NPLM的起源 在NPLM之前&#xff0c;传统的语言模型主要依赖于最基本的N-Gram技术&#xff0c;通过统计词汇的共现频率来计算词汇组合的概率。然而…

【自然语言处理】微调 Fine-Tuning 各种经典方法的概念汇总

【自然语言处理】微调 Fine-Tuning 各种经典方法的概念汇总 前言请看此微调 Fine-TuningSFT 监督微调&#xff08;Supervised Fine-Tuning&#xff09;概念&#xff1a;监督学习&#xff0c;无监督学习&#xff0c;自监督学习&#xff0c;半监督学习&#xff0c;强化学习的区别…

Jetpack之RadionBtton、Switch、Checkbox组件介绍

Jetpack Compose系列(9) - RadionBtton、Switch、Checkbox组件介绍 RadioButton 跟View体系一样&#xff0c;Compose也有RadioButton单选按钮组件&#xff0c;遵从Material Design风格。 其构造函数如下&#xff1a; Composable fun RadioButton(selected: Boolean,onClick…

uniapp+uView 【详解】录音,自制音频播放器

效果预览 代码实现 <template><view class"btnListBox"><view class"audioBox" v-if"audioLength"><u-row><u-col span"2"><u--text aligncenter :text"currentTime"></u--text>…