【Qt】常用的容器

news2025/2/4 1:35:22

        Qt提供了多个基于模板的容器类,这些容器类可用于存储指定类型的数据项。例如常用的字符串列表类 QStringList 可用来操作一个 QList<QString>列表。

        Qt的容器类比标准模板库(standard template library,STL)中的容器类更轻巧、使用更安全且更易于使用。这些容器类是隐式共享和可重入的,而且它们进行了速度和存储上的优化,因而可以减小可执行文件大小。此外,它们是线程安全的,即它们作为只读容器时可被多个线程访问。

        容器类是基于模板的类,例如常用的容器类 QList<T>,T是一种具体的类型,可以是 int、fioat等简单类型,也可以是 QString、QDate 等类。T必须是一种可赋值的类型,即T必须提供一个默
认的构造函数、一个可复制构造函数和一个赋值运算符。

        Qt6 的容器类有 QList、QVector、QStack 、QQueue、 QSet、QMap、QMultilMap、QHash、QMultiHash

一、QList

        在Qt中,QList是一个模板类,用于存储一组对象的动态数组。它提供了方便的方法来访问、增加、删除和修改列表中的元素。

        QList与C++的标准库容器std::vector类似,但它还提供了一些额外的功能和方便的操作符重载。下面是一些QList的常用操作:

- 添加元素:使用append()、prepend()等方法将元素添加到列表的末尾或开头。
- 访问元素:使用at()方法通过索引访问列表中的元素,使用operator[]操作符也可以实现相同的功能。
- 删除元素:使用removeOne()、removeAt()等方法删除列表中的元素。
- 修改元素:使用replace()方法替换列表中的元素。
- 列表大小:使用size()方法获取列表的大小,使用isEmpty()方法检查列表是否为空。
- 迭代访问:使用foreach循环或迭代器对列表进行迭代访问。

        除了这些常用方法外,QList还提供了一些其他的功能,如排序、查找、截取子列表等。可以在Qt的官方文档中查看完整的QList类接口和用法。

注意:在使用QList时,需要包含头文件#include <QList>。

二、QVector

        在Qt中,QVector是一个模板类,用于存储一组对象的可变大小的数组。它与QList相似,但在某些方面具有不同的特性和性能特点。

        与QList相比,QVector在以下情况下可能更适合使用:

1. 读取和访问速度:QVector提供了随机访问的性能优势。如果需要频繁地通过索引访问元素,QVector通常比QList更快。
2. 内存占用:QVector的内存占用通常比QList小,因为它可以更有效地管理和分配内存。
3. 插入和删除操作:对于插入和删除操作,QList通常比QVector更快,尤其在大型数据集的情况下。

        除了上述的区别,QVector和QList提供了类似的方法和操作符重载,如append()、prepend()、at()、removeOne()、replace()、size()等等。可以在Qt的官方文档中查看完整的QVector类接口和用法。

注意:在使用QVector时,需要包含头文件#include <QVector>。

三、QStack

        QStack是Qt中的一个模板类,它是一个栈容器类,用于实现栈数据结构。

        栈(Stack)是一种后进先出(Last-In-First-Out, LIFO)的数据结构,只能在栈的一端(称为栈顶)进行插入和删除操作。

        QStack类提供了以下公共成员函数:

- void push(const T &value):将value插入到栈的顶部。
- void pop():移除栈顶的元素。
- T &top():返回栈顶的元素的引用。
- const T &top() const:返回栈顶的元素的常量引用。
- bool isEmpty() const:判断栈是否为空。
- int size() const:返回栈中元素的个数。

        QStack类可以存储任意类型的数据,并且提供了访问、插入和删除元素的方法。可以使用QStack类来实现各种栈相关的操作。

四、QQueue

        QQueue是Qt中的一个类,用于表示队列数据结构。队列是一种先进先出(First In First Out,FIFO)的数据结构,元素从队列的一端添加,从另一端删除。

        QQueue类提供了以下方法来操作队列:

  • enqueue:在队列的末尾添加一个元素。
  • dequeue:删除队列的头部元素,并返回该元素。
  • head:返回队列的头部元素,但不删除它。
  • isEmpty:判断队列是否为空。
  • size:返回队列中元素的个数。

        使用QQueue类,可以方便地实现队列的操作。例如,在一个多线程程序中,可以使用QQueue来作为线程之间共享的数据结构,一个线程往队列中添加数据,另一个线程从队列中取出数据进行处理。

五、 QSet

        QSet是Qt中的一个类,用于表示集合数据结构。集合是一种不包含重复元素的数据结构,它提供了高效的查找和插入操作。

        QSet类提供了以下方法来操作集合:

  • insert:向集合中插入一个元素。
  • remove:从集合中删除一个元素。
  • contains:判断集合中是否包含某个元素。
  • size:返回集合中元素的个数。

        QSet类还提供了遍历集合元素的方法,如使用迭代器进行迭代或使用foreach循环

六、QMap

        QMap是Qt中的一个类,用于存储键值对的容器。QMap类中的每个元素都是由一个键和一个值组成的。键用于唯一标识一个元素,而值则是与该键关联的数据。QMap中的元素按照键的排序进行存储,并且可以根据键快速地访问到对应的值。这使得QMap非常适用于需要根据键值进行查找、插入和删除操作的场景。QMap类提供了一系列方法来操作存储在其中的键值对,比如插入、移除、查找和遍历等方法。以下是QMap类的一些常用方法:

        - insert(key, value):在QMap中插入一个键值对,如果键已经存在,则会更新对应的值。

        - remove(key):从QMap中移除一个指定键的元素。

        - contains(key):判断QMap中是否包含指定的键。

        - value(key):返回指定键对应的值。

        - keys():返回QMap中所有的键。

        - values():返回QMap中所有的值。

        - size():返回QMap中键值对的个数。

        - clear():移除QMap中的所有元素。

        QMap还提供了一些其他的功能,比如按范围查找、排序等。需要注意的是,QMap中的键是唯一的,不允许出现重复的键。如果插入了重复的键,则会替换掉之前的键值对。使用QMap时,需要注意元素的排序和查找的效率。如果需要按照键的顺序进行访问,可以使用QMap的有序版本QMap。QMap类是基于红黑树实现的,因此它的插入、删除和查找操作的时间复杂度为O(log n),其中n是QMap中元素的个数。

        注意:使用QMap类需要包含头文件#include <QMap>。

七、QMultilMap

        QMultiMap是Qt中的一个类,它是QMap的多重映射版本。QMultiMap类与QMap类一样,同时存储了键值对,但与QMap不同的是,QMultiMap允许存在相同的键,即一个键可以对应多个值。QMultiMap类提供了一系列方法来操作多重映射中的键值对,包括插入、移除、查找和遍历等操作。与QMap类相似,QMultiMap类也按照键的排序进行存储,并且可以通过键快速访问到对应的值。对于相同的键,QMultiMap会按照插入的顺序保存多个值。以下是QMultiMap类的一些常用方法:

        - insert(key, value):在QMultiMap中插入一个键值对。

        - remove(key):从QMultiMap中移除一个指定键的所有元素。

        - remove(key, value):从QMultiMap中移除一个指定键值对。

        - values(key):返回指定键对应的所有值。

        - contains(key):判断QMultiMap中是否包含指定的键。

        - keys():返回QMultiMap中所有的键。

        - size():返回QMultiMap中键值对的个数。

        - clear():移除QMultiMap中的所有元素。

        QMultiMap也提供了按范围查找、排序等功能。使用QMultiMap时,可以很方便地处理一个键对应多个值的情况,比如用于处理消息订阅、事件处理等场景。 需要注意的是,QMultiMap中的键可以重复,但是如果插入了相同的键值对,则会保存多个值,而不会替换掉之前的值。QMultiMap类也是基于红黑树实现的,因此插入、删除和查找操作的时间复杂度为O(log n),其中n是QMultiMap中元素的个数。

八、QHash

        QHash是Qt中的一个类,用于实现哈希表(Hash Table)数据结构。QHash类类似于C++ STL中的std::unordered_map,它提供了一种以键值对的方式存储和访问数据的方法。与QMap类不同的是,QHash并不会对其元素进行排序,而是通过哈希函数将键转化为索引,并通过索引直接访问元素,从而实现了快速查找和插入。QHash类提供了一系列方法来操作哈希表中的元素,包括插入、移除、查找和遍历等操作,以下是QHash类的一些常用方法:

        - insert(key, value):在QHash中插入一个键值对。

        - remove(key):从QHash中移除一个指定键的元素。

        - value(key):返回指定键对应的值。

        - contains(key):判断QHash中是否包含指定的键。

        - keys():返回QHash中所有的键。

        - values():返回QHash中所有的值。

        - size():返回QHash中键值对的个数。

        - clear():移除QHash中的所有元素。

        QHash的底层实现使用了哈希表技术,通过哈希函数将键转换为索引,并使用链地址法解决哈希冲突。因此,对于大多数操作,QHash的时间复杂度为O(1)。值得注意的是,QHash对键的顺序并不做保证,即无法保证键的插入顺序和遍历顺序是一致的。QHash类还提供了与STL兼容的迭代器,可以使用迭代器来遍历QHash中的元素。使用QHash时,需要保证键类型是可哈希的(即提供了哈希函数),并支持比较操作符。QHash在很多场景中都是非常有用的,比如用于快速查找和存储大量的键值对,或者用于实现缓存、索引结构等。

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

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

相关文章

tiktok 国际版抖抖♬♬ X-Bogus参数算法逆向分析

加密请求参数得到乱码&#xff0c;最终得到X-Bogus

C++ Primer 命名空间的using声明

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

c语言(关键字)

前言&#xff1a; 感谢b站鹏哥c语言 内容&#xff1a; 栈区&#xff08;存放局部变量&#xff09; 堆区 静态区&#xff08;存放静态变量&#xff09; rigister关键字 寄存器&#xff0c;cpu优先从寄存器里边读取数据 #include <stdio.h>//typedef&#xff0c;类型…

ARM内核:嵌入式时代的核心引擎

引言 在当今智能设备无处不在的时代&#xff0c;ARM&#xff08;Advanced RISC Machines&#xff09;处理器凭借其高性能、低功耗的特性&#xff0c;成为智能手机、物联网设备、汽车电子等领域的核心引擎。作为精简指令集&#xff08;RISC&#xff09;的典范&#xff0c;ARM核…

Airflow:选择合适执行器扩展任务执行

Apache Airflow是面向开发人员使用的&#xff0c;以编程方式编写、调度和监控的数据流程平台。可伸缩性是其关键特性之一&#xff0c;Airflow支持使用不同的执行器来执行任务。在本文中&#xff0c;我们将深入探讨如何利用这些执行器在Airflow中有效地扩展任务执行。 理解Airfl…

CoRAG 来自微软与人大的创新RAG框架技术

微软与人大合作开发的CoRAG(Chain-of-Retrieval Augmented Generation)是一种创新的检索增强生成(RAG)框架,旨在通过模拟人类思考方式来提升大语言模型(LLM)在复杂问题上的推理和回答能力。以下是对CoRAG的深度介绍: 1. CoRAG的核心理念 CoRAG的核心思想是通过动态调…

Qt Creator 中使用 vcpkg

Qt Creator 中使用 vcpkg Qt Creator 是一个跨平台的轻量级 IDE&#xff0c;做 Qt 程序开发的同学们肯定对这个 IDE 都比较属于。这个 IDE 虽然没有 Visual Stdio 功能那么强&#xff0c;但是由于和 Qt 集成的比较深&#xff0c;用来开发 Qt 程序还是很顺手的。 早期&#xf…

mysql中in和exists的区别?

大家好&#xff0c;我是锋哥。今天分享关于【mysql中in和exists的区别&#xff1f;】面试题。希望对大家有帮助&#xff1b; mysql中in和exists的区别&#xff1f; 在 MySQL 中&#xff0c;IN 和 EXISTS 都是用于子查询的操作符&#xff0c;但它们在执行原理和适用场景上有所不…

智慧园区管理系统推动企业智能运维与资源优化的全新路径分析

内容概要 在当今快速发展的商业环境中&#xff0c;园区管理的数字化转型显得尤为重要。在这个背景下&#xff0c;快鲸智慧园区管理系统应运而生&#xff0c;成为企业实现高效管理的最佳选择。它通过整合互联网、物联网等先进技术&#xff0c;以智能化的方式解决了传统管理模式…

物联网 STM32【源代码形式-使用以太网】连接OneNet IOT从云产品开发到底层MQTT实现,APP控制 【保姆级零基础搭建】

物联网&#xff08;IoT&#xff09;‌是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器等装置与技术&#xff0c;实时采集并连接任何需要监控、连接、互动的物体或过程&#xff0c;实现对物品和过程的智能化感知、识别和管理。物联网的核心功能包括数据采集与监…

谭浩强C语言程序设计(4) 8章(下)

1、输入三个字符串按照字母顺序从小到大输出 #include <cstdio> // 包含cstdio头文件&#xff0c;用于输入输出函数 #include <cstring> // 包含cstring头文件&#xff0c;用于字符串处理函数#define N 20 // 定义字符串的最大长度为20// 函数&#xff1a;…

使用朴素贝叶斯对散点数据进行分类

本文将通过一个具体的例子&#xff0c;展示如何使用 Python 和 scikit-learn 库中的 GaussianNB 模型&#xff0c;对二维散点数据进行分类&#xff0c;并可视化分类结果。 1. 数据准备 假设我们有两个类别的二维散点数据&#xff0c;每个类别包含若干个点。我们将这些点分别存…

【Pytorch和Keras】使用transformer库进行图像分类

目录 一、环境准备二、基于Pytorch的预训练模型1、准备数据集2、加载预训练模型3、 使用pytorch进行模型构建 三、基于keras的预训练模型四、模型测试五、参考 现在大多数的模型都会上传到huggface平台进行统一的管理&#xff0c;transformer库能关联到huggface中对应的模型&am…

Python 深拷贝与浅拷贝:数据复制的奥秘及回溯算法中的应用

引言 在 Python 编程领域&#xff0c;数据复制是极为常见的操作。而深拷贝和浅拷贝这两个概念&#xff0c;如同紧密关联却又各具特色的双子星&#xff0c;在数据处理过程中扮演着重要角色。深入理解它们&#xff0c;不仅有助于编写出高效、准确的代码&#xff0c;还能避免许多…

简单易懂的倒排索引详解

文章目录 简单易懂的倒排索引详解一、引言 简单易懂的倒排索引详解二、倒排索引的基本结构三、倒排索引的构建过程四、使用示例1、Mapper函数2、Reducer函数 五、总结 简单易懂的倒排索引详解 一、引言 倒排索引是一种广泛应用于搜索引擎和大数据处理中的数据结构&#xff0c;…

初级数据结构:栈和队列

目录 一、栈 (一)、栈的定义 (二)、栈的功能 (三)、栈的实现 1.栈的初始化 2.动态扩容 3.压栈操作 4.出栈操作 5.获取栈顶元素 6.获取栈顶元素的有效个数 7.检查栈是否为空 8.栈的销毁 9.完整代码 二、队列 (一)、队列的定义 (二)、队列的功能 (三&#xff09…

阿里云 - RocketMQ入门

前言 云消息队列 RocketMQ 版产品具备异步通信的优势&#xff0c;主要应用于【异步解耦】、【流量削峰填谷】等场景对于同步链路&#xff0c;需要实时返回调用结果的场景&#xff0c;建议使用RPC调用方案阿里云官网地址RocketMQ官网地址 模型概述 生产者生产消息并发送至服务…

Agentic Automation:基于Agent的企业认知架构重构与数字化转型跃迁---我的AI经典战例

文章目录 Agent代理Agent组成 我在企业实战AI Agent企业痛点我构建的AI Agent App 项目开源 & 安装包下载 大家好&#xff0c;我是工程师令狐&#xff0c;今天想给大家讲解一下AI智能体&#xff0c;以及企业与AI智能体的结合&#xff0c;文章中我会列举自己在企业中Agent实…

列表标签(无序列表、有序列表)

无序列表 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head><…

每天学点小知识之设计模式的艺术-策略模式

行为型模式的名称、定义、学习难度和使用频率如下表所示&#xff1a; 1.如何理解模板方法模式 模板方法模式是结构最简单的行为型设计模式&#xff0c;在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式&#xff0c;可以将一些复杂流程的实现步骤封装在一系列基…