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.hqwc.cn/news/457946.html

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

相关文章

C语言——字符、数组和函数指针变量

目录 1. 字符指针变量2. 数组指针变量2.1 数组指针变量是什么&#xff1f;2.2 数组指针变量怎么初始化 3. 二维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用4.3 typedef关键字 5. 函数指针数组6. 转移表 1. 字符指针变量 在指针的类型中我们知道…

解析基于检索排序的知识图谱问答系统

目录 前言1 问句的表示与语义理解1.1 问句表示的重要性1.2 端到端网络的优势 2 知识图谱中的排序问题2.1 知识图谱的核心作用2.2 查询匹配的转化与排序问题2.3 实体链接的关键性2.4 路径的构建与系统优化 3 难点与挑战3.1 实体链接、命名实体识别和消歧3.2 排序模型的挑战 4 优…

泛娱乐社交出海洞察,Flat Ads解锁海外增长新思路

摘要:解读泛娱乐社交应用出海现状与趋势,解锁“掘金”泛娱乐社交出海赛道新思路。 根据全球舆情监测机构 Meltwater 和社交媒体机构We are Social最新发布数据显示,全球社交媒体活跃用户数量已突破50亿,约占世界人口总数62.5%。庞大的用户数量意味着广阔的增量空间,目前,随着全…

板块零 IDEA编译器基础:第三节 下载和在IDEA中集成 Tomcat服务器 来自【汤米尼克的JAVAEE全套教程专栏】

板块零 IDEA编译器基础&#xff1a;第三节 下载和在IDEA中集成 Tomcat服务器 一、为什么选择Tomcat&#xff08;1&#xff09;常见的JAVA WEB服务器&#xff08;2&#xff09;选择Tomcat的理由 二、Tomcat 8.5下载解压三、Tomcat 结构目录四、在IDEA中集成Tomcat 假设我们已经…

23.HarmonyOS App(JAVA)堆叠布局StackLayout使用方法

不常用 StackLayout直接在屏幕上开辟出一块空白的区域&#xff0c;添加到这个布局中的视图都是以层叠的方式显示&#xff0c;而它会把这些视图默认放到这块区域的左上角&#xff0c;第一个添加到布局中的视图显示在最底层&#xff0c;最后一个被放在最顶层。上一层的视图会覆盖…

过年回家必备,向日葵远程控制帮您假期轻松“应急”

春节假期临近&#xff0c;无论是回家过年还是假期出游&#xff0c;我们都可能遇到突然的“业务”需要临时处理&#xff0c;可是电脑没在身边又怎么办呢&#xff1f;别慌&#xff0c;我们可以用向日葵远程控制。 通过使用向日葵远程控制&#xff0c;手机就能远程控制办公电脑&a…

微信小程序(三十六)事件传参

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.传参步骤 2.传参接收解构步骤 源码&#xff1a; index.wxml <button type"primary" bind:tap"onclick" mark:index"{{0}}" mark:remb"{{1}}" class"But&quo…

DataX详解和架构介绍

系列文章目录 一、 DataX详解和架构介绍 二、 DataX源码分析 JobContainer 三、DataX源码分析 TaskGroupContainer 四、DataX源码分析 TaskExecutor 五、DataX源码分析 reader 六、DataX源码分析 writer 七、DataX源码分析 Channel 文章目录 系列文章目录DataX是什么&#xff…

在WORD中设置公式居中编号右对齐设置方式

1 软件环境 Office Microsoft Office LTSC 专业增强版2021 2 最终效果 3 操作步骤 编辑公式&#xff1b;光标定位到公式的最后&#xff08;不是行的最后&#xff09;&#xff1b;输入#编号光标定位在公式最后&#xff08;不是行的最后&#xff09;&#xff0c;按Enter键回车…

(五)springboot 配置多数据源连接mysql和hive

项目结构如下 mysql 执行如下建表语句&#xff0c;并插入一条测试数据 1 2 3 4 5 CREATE TABLE user ( id int(11) NOT NULL, name varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_ge…

Java实现网上药店系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 药品类型模块2.3 药品档案模块2.4 药品订单模块2.5 药品收藏模块2.6 药品资讯模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 药品表3.2.3 药品订单表3.2.4 药品收藏表3.2.5 药品留言表…

【Java安全】ysoserial-URLDNS链分析

前言 Java安全中经常会提到反序列化&#xff0c;一个将Java对象转换为字节序列传输&#xff08;或保存&#xff09;并在接收字节序列后反序列化为Java对象的机制&#xff0c;在传输&#xff08;或保存&#xff09;的过程中&#xff0c;恶意攻击者能够将传输的字节序列替换为恶…