QT容器分类与QSet应用

一.QT容器分类

Qt提供了多种容器类,大致可以分为以下几类:

1.顺序容器:这类容器按照线性顺序(如列表或数组)存储元素。例如,QList, QLinkedList, QVector, QStack, 和 QQueue。

2.关联容器:这类容器允许你存储自定义的键值对。例如,QMap 和 QHash。

3.容器迭代器:用于遍历容器中的元素。Qt提供了Java类型的迭代器和STL类型的迭代器。

4.其他容器:还有一些其他类型的容器,如QSet,用于存储唯一元素的集合。

二.容器介绍

1.顺序容器和关联容器在前面文章已有详细介绍,不在赘述。

2.容器迭代器:

(1)Java风格的迭代器:

QSetIterator: 这是一个只读迭代器,用于遍历QSet中的元素。

QSet<int> set;

// 假设set已经被填充了一些数据...

QSetIterator<int> it(set);

while (it.hasNext()) {

    int value = it.next();

    qDebug()<<value;

}

(2)STL风格的迭代器

QSet::const_iterator: 这是一个const迭代器,用于只读遍历集合中的元素。

const QSet<int> set;

// 假设set已经被填充了一些数据...

for (QSet<int>::const_iterator it = set.constBegin(); it != set.constEnd(); ++it) {

    int value = *it;

    qDebug()<<value;

}

三.QSet介绍

QSet<T> 是 Qt 的通用容器类之一。 它以未指定的顺序存储值并提供非常快速的值查找。

QSet的API大部分和QList相同。这里仅列举QSet独有的成员函数。

1、QSet<T> & intersect(const QSet<T> &other)

QSet<T> & operator&=(const QSet<T> &other)

从当前集合中删除other集合中未包含的所有项目。返回当前集合的引用。

QSet<int> set1{1,2,3,4,5};

QSet<int> set2{4,5};

set1.intersect(set2);

qDebug()<<set1;// QSet(4, 5)

2、bool intersects(const QSet<T> &other)

如果此集合至少有一项与 other 的项相同,则返回 true。(是否相交)

3、QSet<T> & subtract(const QSet<T> &other)

从当前集合中删除包含在other集合中的所有项目。返回当前集合的引用。

QSet<int> set1{1,2,3,4,5};

QSet<int> set2{4,5};

set1.subtract(set2);

qDebug()<<set1;// QSet(1, 2, 3)

4、QSet<T> & unite(const QSet<T> &other)

other 集合合并到当前集合。 返回当前集合的引用。

QSet<int> set1{1,2,3,4,5};

QSet<int> set2{4,5,6,7};

set1.unite(set2);

qDebug()<<set1;//QSet(3, 1, 5, 6, 7, 2, 4)

5、QSet<T> operator&(const QSet<T> &other)

返回新的集合。取交集。

QSet<int> set1{1,2,3,4,5};

QSet<int> set2{4,5,6,7};

qDebug()<<(set1 & set2);//QSet(4, 5)

6、QSet<T> & operator&=(const T &value)

QSet<int> set1{1,2,3,4,5};

set1 &= 4;

qDebug()<<set1;//QSet(4)

7、QSet<T> operator-(const QSet<T> &other)

返回一个新的 QSet,它是当前集合和 other 集合的集合差。

QSet<int> set1{1,2,3,4,5};

QSet<int> set2{4,5,6,7};

qDebug()<<(set1 - set2);// QSet(1, 2, 3)

8、QSet<T> & operator-=(const QSet<T> &other)

等同于 subtract(other)。

9、QSet<T> & operator-=(const T &value)

减去集合中的一项

QSet<int> set1{1,2,3,4,5};

qDebug()<<(set1 -= 3);// QSet(5, 2, 1, 4)

10. // 输出成QList

QList<QString> listStrs = set.toList();

qDebug()<< "输出成QList :" << listStrs;

11.常规操作

QSet<QString> set;

set.insert("212");

 // 重置大小

 set.reserve(10);

 // 输出容量

qDebug()<< "容量 :" << set.capacity();

 // 输出内容

 qDebug()<< "输出内容 :" << set;

// 是否包含

set.contains("121")   //true 包含

// 输出实际大小

qDebug()<< "实际大小:" << set.size();

 // 输出内容

qDebug() << "输出内容 :" << set;

// 是否是空

 qDebug()<< "是否为空 :" << set.isEmpty();

// 移除某值

set.remove("121");

// 输出所有元素

qDebug()<< "输出元素 :" << set.values();

// 清除

set.clear();

四.使用场景

1.消除重复项:

如果有一个包含重复项的列表或数组,并且想要消除重复项,可以使用QSet。QSet会自动删除重复的元素,只保留唯一的元素。

2.快速查找:

QSet提供了高效的插入、查找和删除操作。如果需要频繁地查找元素是否存在于一个集合中,QSet是一个很好的选择。它的查找操作的时间复杂度接近于O(1),因此非常快速。

3.集合运算:QSet支持常见的集合运算,如并集、交集和差集。可以使用QSet来执行这些操作,对两个集合进行合并、比较或找出它们的共同元素。

4.存储唯一标识符:

在某些情况下,可能需要存储一组唯一标识符,例如数据库中的唯一ID或网络中的唯一连接。QSet可以方便地存储这些标识符,并确保每个标识符只出现一次。

5.跟踪状态:

如果需要跟踪一组对象的状态,并确保每个状态只出现一次,可以使用QSet。例如,在一个游戏中,可能需要跟踪玩家已经访问过的关卡,以确保他们不会重复访问。

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

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

相关文章

LLM应用开发与落地:基于上下文的文本信息检测与提取

最近一直用LLM解决各种各样的问题&#xff0c;感觉已经脱离不了LLM了。每次使用LLM解决一个之前解决不了的问题&#xff0c;或者大大提升我的工作效率的时候&#xff0c;我内心都小小会激动一下。我想这是只通过看文章或只是研究AI理论感受不到的小确幸。我也因此更加确信LLM是…

react-jss书写样式

目录 react-jss的使用 react-jss的使用 实现组件化样式、动态样式、避免样式冲突 npm install react-jss yarn add react-jss// 使用 import React from react; import { createUseStyles } from react-jss;const useStyles createUseStyles({myButton: {color: green,margi…

Kotlin MultiPlatform:构建跨平台应用的未来

Kotlin MultiPlatform&#xff1a;构建跨平台应用的未来 1 引言 1.1 Kotlin MultiPlatform简介 Kotlin MultiPlatform&#xff08;简称KMP&#xff09;是一种由JetBrains开发的跨平台开发解决方案&#xff0c;它建立在Kotlin语言之上。KMP允许开发者使用一套Kotlin代码来构建…

【2024】Docker部署Redis

1.说明&#xff1a; 因为容器实例的运行是有生命周期的&#xff0c;一些redis的备份、日志和配置文件什么的最好还是放在服务器本地。这样当容器删除时&#xff0c;我们也可以保留备份和日志文件。所以先在本地服务器安装redis并配置文件设置。下面是安装步骤: 2.安装步骤 1…

Jmeter性能测试: 基于JDK 21 安装 Jmeter 5.6.3

目录 一、实验 1.环境 2.JDK下载 3.Jmeter下载 4.Windows安装JDK 21 5.Windows安装Jmeter 5.6.3 6.Linux安装JDK 21 7.Linux安装Jmeter 5.6.3 二、问题 1. Linux 的profile、bashrc、bash_profile文件有哪些区别 一、实验 1.环境 &#xff08;1&#xff09;主机 表…

Android源码设计模式解析与实战第2版笔记(二)

第二章 应用最广的模式 — 单例模式 单例模式的定义 确保某一个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供这个实例。 单例模式的使用场景 确保某个类有且只有一个对象的场景&#xff0c;避免产生多个对象消耗过多的资源&#xff0c;或者某种类型的对象只应…

压电式、电磁式蜂鸣器设计电路

蜂鸣器常用分类从两方面 声源类型&#xff1a;压电蜂鸣器( Piezoceramic Element Buzzers )、电磁蜂鸣器( Magnetic Buzzers ) 驱动类型&#xff1a;有源蜂鸣器( Indicators )、无源蜂鸣器( Transducers ) 一、电磁式蜂鸣器 无源电磁式设计电路 电磁蜂鸣器的线圈类似于电感&am…

“文心一言”揭秘:智能语言模型的新里程碑

前文 在数字化、信息化的浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;技术如同一匹黑马&#xff0c;不断刷新着我们对科技发展的认知。其中&#xff0c;智能语言模型作为AI领域的一大分支&#xff0c;更是引领着自然语言处理&#xff08;NLP&#xff09;技术的革新。…

web前端项目-动画特效【附源码】

文章目录 一&#xff1a;赛车游戏动画HTML源码&#xff1a;JS源码&#xff1a;CSS源码&#xff1a;&#xff08;1&#xff09;normalize.css&#xff08;2&#xff09;style.css 二&#xff1a;吉普车动画演示HTML源码&#xff1a;CSS源码&#xff1a;&#xff08;1&#xff09…

ARM Cortex-A 内核的运行模式切换

ARM Cortex-A 内核的运行模式切换 ARM Cortex-A系列内核的处理器支持多种运行模式的切换。 不同的运行模式能满足不同的需求,如响应中断、运行操作系统内核、处理异常等。 目录 1 ARM Cortex-A 内核的处理器什么场景下有切换运行模式的需求 2 ARM Cortex-A 内核的处理…

【时间序列篇】基于LSTM的序列分类-Pytorch实现 part1 案例复现

系列文章目录 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part1 案例复现 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part2 自有数据集构建 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part3 化为己用 本篇文章是对已有一篇文章的整理归纳&#xff0c;并对文章中…

HybridA* 论文解读

本文旨在对原论文进行翻译&#xff0c;对混合A*有一个大概的理解 论文题目&#xff1a;Practical Search Techniques in Path Planning for Autonomous Driving 1 摘要 本文描述了一个实用的路径规划算法&#xff0c;无人驾驶汽车在未知的环境中&#xff0c;障碍物通过机器人…

计算机毕业设计 | SSM 凌云招聘平台(附源码)

1&#xff0c;绪论 人力资源是企业产生效益、创造利润的必不可少的、最重要的资源。人作为人力资源的个体可看作是一个承载着有效知识、能力的信息单元。这样的信息单元可看作是一个为企业产生价值和利润的个体。从而使得这样的信息单元所具有的信息就是一个有价值的信息。 校…

UnityUI看向相机

注释 在项目中经常会用到名字始终看向相机&#xff0c;可以挂上如下代码 using UnityEngine;public class LookAtCamera : MonoBehaviour {public Camera _camera;public void Start(){_camera Camera.main;}void Update(){//transform.LookAt(transform.position _camera.…

Windows版本Node.js常见问题及操作解决方式(小白入门必备)

npm i时ERROR:reason: certificate has expired问题 https://blog.csdn.net/m0_73360677/article/details/135774500 # 1.取消ssl验证&#xff1b;npm config set strict-ssl false#这个方法一般可以直接解决问题&#xff0c;如不能请尝试第二种方法# 2.更换npm镜像源&#x…

day34WEB 攻防-通用漏洞文件上传黑白盒审计逻辑中间件外部引用

目录 一&#xff0c;白盒审计-Finecms-代码常规-处理逻辑 黑盒思路&#xff1a;寻找上传点抓包修改突破获取状态码及地址 审计流程&#xff1a;功能点-代码文件-代码块-抓包调试-验证测试 二&#xff0c;白盒审计-CuppaCms-中间件-.htaccess 三&#xff0c;白盒审计-Metin…

银行数据仓库体系实践(11)--数据仓库开发管理系统及开发流程

数据仓库管理着整个银行或公司的数据&#xff0c;数据结构复杂&#xff0c;数据量庞大&#xff0c;任何一个数据字段的变化或错误都会引起数据错误&#xff0c;影响数据应用&#xff0c;同时业务的发展也带来系统不断升级&#xff0c;数据需求的不断增加&#xff0c;数据仓库需…

adb测试冷启动和热启动 Permission Denial解决

先清理日志 adb shell logcat -c 打开手机模拟器中的去哪儿网&#xff0c;然后日志找到包名和MainActivity adb shell logcat |grep Main com.Qunar/com.mqunar.atom.alexhome.ui.activity.MainActivity 把手机模拟器的去哪儿的进程给杀掉 执行 命令 adb shell am start -W…

专业133总分400+上海交通大学819考研经验分享上交819电子信息与通信工程

今年专业819信号系统与信号处理133&#xff0c;总分400&#xff0c;如愿考上梦中上海交通大学&#xff0c;通过自己将近一年的复习&#xff0c;实现了人生中目前为止最大的逆袭&#xff08;自己本科学校很普通&#xff09;&#xff0c;总结自己的复习经历&#xff0c;希望可以给…

苹果Arcade会员的交易开通

arcade是苹果的游戏订阅服务&#xff0c;会员可以畅玩200多个苹果商店精品游戏&#xff0c;包括美区apple id绑卡apple tv购买内购游戏apple one、A2K、狂野飙8&#xff0c;同时ChatGPT也可以&#xff0c;并且这些游戏没有广告没有内购项目&#xff0c;可以在线玩也可以离线玩&…