Qt扫盲-QSet理论总结

news2024/9/25 1:17:11

QSet理论总结

  • 一、概述
  • 二、使用
    • 1. 声明
    • 2. 插入元素
    • 3. 遍历元素
    • 4. 删除元素
    • 5. 集合的运算
    • 6. 其他

一、概述

QSet是Qt的通用容器类之一。俗称一个集合。QSet会按未指定的顺序存储值,也就是随机存值的方式,并提供非常快速的值查找。在内部,QSet实现为QHash。
在集合内部。值是唯一的哈。就行下面这个例子,把QStringList转成 Set 的方式就可以去除重复的元素。

  QStringList list;
  list << "Julia" << "Mike" << "Mike" << "Julia" << "Julia";

  QSet<QString> set = QSet<QString>::fromList(list);
  set.contains("Julia");  // returns true
  set.contains("Mike");   // returns true
  set.size();             // returns 2

二、使用

1. 声明

下面是一个具有QString值的QSet示例:

QSet<QString> set;

2. 插入元素

要向集合中插入一个值,可以使用insert():

set.insert("one");
set.insert("three");
set.insert("seven");

另一种向集合中插入元素的方法是使用<<()运算符:

set << "twelve" << "fifteen" << "nineteen";

要测试一个元素是否属于集合,可以使用contains():

if (!set.contains("ninety-nine"))
      ...

3. 遍历元素

如果想遍历存储在QSet中的所有值,可以使用迭代器。QSet支持java风格的迭代器(QSetIterator和QMutableSetIterator)和stl风格的迭代器(QSet::iterator和QSet::const_iterator)。

下面是如何使用java风格的迭代器迭代QSet<QWidget *>:

QSetIterator<QWidget *> i(set);
while (i.hasNext())
      qDebug() << i.next();

下面是相同的代码,但使用了stl风格的迭代器:

QSet<QWidget *>::const_iterator i = set.constBegin();
while (i != set.constEnd()) {
      qDebug() << *i;
      ++i;
}

QSet是无序的,因此不能假定迭代器的序列是可预测的。如果需要按键排序,则使用QMap。
要浏览QSet,你还可以使用foreach:

QSet<QString> set;
  ...
foreach (const QString &value, set)
      qDebug() << value;

4. 删除元素

可以使用remove()方法从集合中删除元素。还有一个clear()函数可以删除所有元素。

5. 集合的运算

我们知道数学上的集合有很多运算

在这里插入图片描述
QSet 也提供了这些功能

  • QSet & intersect(const QSet &other):返回两个集合的交集
  • QSet & unite(const QSet &other):返回两个集合的并集
  • QSet & subtract(const QSet &other) :返回两个集合的差集

6. 其他

QSet的值数据类型必须是可赋值的数据类型。例如,您不能将QWidget存储为值;相反,存储一个QWidget *。此外,类型必须提供==()运算符,还必须有一个全局的qHash()函数,返回键类型参数的散列值。有关QHash()支持的类型列表,请参阅QHash文档。

在内部,QSet使用散列表来执行查找。散列表会自动增长和收缩,以提供快速查找,而不会浪费内存。如果你已经知道QSet大约包含多少个元素,那么仍然可以通过调用reserve()来控制散列表的大小,但这不是获得良好性能所必需的。你也可以调用capacity()来取得散列表的大小。

QSet 可以和QList相互转换

  • QList toList() :把QSet转成QList,但是是无序的。
  • fromList(const QList &list):把QList转为QSet,也是无序的而且是去重复的。

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

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

相关文章

python学习|第二天

文章目录1.函数函数调用函数返回值函数参数2.bug常见类型粗心类型知识点不扎实思路不清被动掉坑常见异常类型3.文件的读写打开模式文件对象常用方法with方法4.os模块操作目录相关函数5.打包成可执行文件1.函数 函数调用 p89&#xff0c;笔记待补 函数返回值 1&#xff09;如…

微信小程序开发过程整理

目录1微信开发相关介绍1.1微信公众平台1.2微信开放平台1.3注意事项2微信小程序开发整体介绍2.1微信小程序简介2.2小程序接入流程3框架简介3.1uni-app简介3.2学习使用uni-app3.3学习微信小程序开发4开发规范5开发示例5.1开发工具5.2开发调试5.2.1导入代码5.2.2项目运行5.2.3在微…

java常见题3

11.二分查找的次数 奇数取 中间那一个作为中值 偶数个取 中间靠左 然后不断模拟这个算法 查找的最多次数&#xff1a;n个元素里最多查找log二N 个元素Log2 128 7 12.equals和hashCode java.lang.Object类中有两个非常重要的方法&#xff1a; public boolean equals(Obje…

YOLOV5模型训练

之前在博文中讲到了YOLOV5的运行,以及转tensorrt. 但是, 一个模型通常需要结合数据训练,才能得到更好的结果. 因此,我们有必要熟悉yolov5的训练过程. 执行训练的过程 Yolov5的github提供了官方的训练脚本. 第一次运行,会自动下载数据集,然后会检测到你的gpu配置,如果不对,…

【数据结构】树

树(Tree) 知识框架 树的定义 树和图一样都是非线性结构&#xff0c;树是n个结点的有限集合&#xff0c;当n0时&#xff0c;称这棵树为空树。 非空树有以下特征&#xff1a; 有且仅有一个称为根的结点。如果n>1, 除根结点以外其它结点可以分为m(m>0)个不相交的集合T1,T…

E4445A频谱分析仪

18320918653 E4445A 名称&#xff1a;E4445A 频谱分析仪&#xff0c; 3 Hz - 13.2 GHz 详细&#xff1a;主要技术指标 性能 /-0.24 dB幅度精度 -155 dBm/Hz显示的平均噪声电平&#xff08;DNAL&#xff09; 10 kHz偏置时的相噪&#xff1a;-118 dBc/Hz 81 dB W-CDMA AC…

春节倒计时,让我来秀一手:用Python制作一个对联生成器

前言 跨年跨完了&#xff0c;马上就要迎来春节了&#xff0c;这不得秀一手&#xff1f; 那就直接开始春节的表演呗 勉勉强强来用python制作对联生成器吧 效果展示 这里的话&#xff0c;你自己想要啥春联主题是可以搜索滴&#xff0c;有些地方也是可以看着改的&#xff0c;…

FPGA知识汇集-FPGA的低功耗设计方法总结

精确的热分析在很多电子产品设计中都有着举足轻重的作用&#xff0c;在高端的PCB设计中尤为突出。热分析的结果常常会影响PCB的机械层设计和产品的外壳设计:是否需要安装散热片、散热风扇等。如果安装散热风扇&#xff0c;往往需要降低其噪音&#xff0c;这将使得机械层设计变得…

【OpenAI】What Is ChatGPT

文章目录介绍注册介绍 OpenAI发布了一个全新的聊天机器人模型—— ChatGPT&#xff0c;同时这也是继GPT-3.5 系列的主力模型之一 ChatGPT 测试地址&#xff1a; https://chat.openai.com/auth/login https://gpt.chatapi.art/ ChatGPT官方说明&#xff1a; Optimizing Langua…

【自学Java】Java语言数组遍历

Java语言数组遍历 Java语言数组遍历教程 Java 语言 中如果我们定义好了数组&#xff0c;并且给数组设置了值&#xff0c;那么怎么样访问数组呢&#xff1f;怎么样获取数组里面的数据值呢&#xff1f;我们可以使用 for 来遍历数组&#xff0c;获取每个位置上的值。 Java语言数…

谷粒学院——第十四章、微信扫码登录

准备工作 注册开发者资质 官网&#xff1a;https://open.weixin.qq.com/ 尚硅谷分享 wx:open:# 微信开放平台 appidappid: wxed9954c01bb89b47# 微信开放平台 appsecretappsecret: a7482517235173ddb4083788de60b90e# 微信开放平台 重定向url&#xff08;guli.shop需要在微…

腾讯云存储

文章目录一、开通腾讯云存储1.注册腾讯云账号&#xff0c;开通对象服务2. 创建存储桶3.获取SecretId 和 SecretKey提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、开通腾讯云存储 在项目钟的图片以及文件需要归档存储。如果归档文件只保存到服务器…

WebRTC学习总结

WebRTC (Web Real-Time Communications) 是一项实时通讯技术&#xff0c;它允许网络应用或者站点&#xff0c;在不借助中间媒介的情况下&#xff0c;建立浏览器之间点对点&#xff08;Peer-to-Peer&#xff09;的连接&#xff0c;实现视频流和&#xff08;或&#xff09;音频流…

二十五、Docker (1)

&#x1f33b;&#x1f33b; 目录一、Docker的概述1.1 为什么要去学习Docker1.2 Docker 概述1.3 Docker的历史1.4 Docker 官网1.5 Docker能做什么1.6 DevOps(开发、运维)二、Docker安装启动&#xff08;官网&#xff09;2.1 Docker 架构2.1.1 镜像&#xff08;image)2.1.2 容器…

DICOM 图像传输:使用 LeadTools 实现 C-Store SCP 服务

文章目录开发环境创建 Qt Widgets 程序设计界面配置 LeadTools 路径编写代码使用 LDicomNet 实现 SCP 的步骤日志输出编写 SCP Server 类编写 SCP Client 类启动 LDicomNet 及启动监听编译程序运行程序发布与部署测试程序界面美化参考开发环境 LeadTools 17Qt 5.15.2 MSVC2019…

【Linux】进程间通信(万字详解) —— 上篇

&#x1f387;Linux&#xff1a; 博客主页&#xff1a;一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 看似不起波澜的日复一日&#xff0c;一定会在某一天让你看见坚持…

谷粒学院——第九章、阿里云视频点播

阿里云视频点播 开通 地址&#xff1a; 上传测试 开通以后&#xff0c;点击控制台&#xff0c;然后选择音/视频&#xff1a; 注意&#xff1a;先点击启用存储地址再上传。 添加转码模版&#xff1a; 开发文档 官方地址&#xff1a;https://help.aliyun.com/p…

批量统计不同块的数量

CAD收集块的数量一般采用FI等命令&#xff0c;或者使用天正等软件&#xff0c;这些方法或多或少都存在某些问题。这时就可以编写插件满足不同场景的使用。已应用到实际工作中。 一、界面及其功能 采用c#制作cad插件&#xff0c;框选待统计范围&#xff0c;直接输出到表格中&…

数据库连接超时的处理

报错信息&#xff1a;Caused by: java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695)at com.zaxxer.hikari.pool.H…

Java高手速成 | 数据库实训:图书馆管理系统建模

图书馆管理系统是常见的管理信息系统&#xff0c;考虑到系统的推广性&#xff0c;本系统采用SQL SERVER2000作为数据库。并且采用PowerDesigner进行数据建模&#xff0c;从而自动生成sql脚本。 01、数据库概念设计 1. 数据库表设计 管理员表admin&#xff1a;管理员编号&am…