Qt容器类汇总说明

QList中QPair类型排序(C++ list排序pair) QList对于QPair排序 阅读详情
 

下述说明来源于官方文档

介绍

Qt库提供了一组通用的基于模板的容器类。这些类可用于存储指定类型的项。例如,如果你需要一个可调整大小的数组qstrings,使用QVector <QString>。

这些容器类的设计要比STL容器更轻、更安全、更容易使用。如果您不熟悉STL,或者更喜欢做“qt方式”,您可以使用这些类而不是STL类。

Qt还提供了一个foreach关键字,让它来遍历所有的物品存放在一个容器很容易。

qt提供的foreach在c++标准中并没有,在c++11中提供了类似于for(auto t:container)方式遍历容器,此方式qt也支持,个人感觉使用for更好

……更多介绍看官网

本博客的Qt容器使用说明

QMap、QMultiMap、QHash、QMultiHash、QQueue、QStack、

容器类

Qt提供了下列顺序容器:QList,QLinkedList,QVector,QStack,和QQueue。对于大多数应用程序,QList是使用最好的类型。虽然它底层用数组链表实现,但提供了非常快速的前后追加函数。如果你真的需要一个链表,用QLinkedList;如果你想让你的项目占用连续的内存位置,使用QVector。QStack 和QQueue提供了先进先出(LIFO ),先结后出(FIFO )。

Qt也提供了关联式容器:QMap,QMultiMap,QHash,QMultiHash,和QSet。Multi容器支持多个value关联到单一的key。Hash容器提供了通过hash函数快速查找取代二分查找。

特殊情况下,QCache和QContiguousCache提供了在有限的cache中高效的查找对象。

ClassSummary
QList<T>This is by far the most commonly used container class. It stores a list of values of a given type (T) that can be accessed by index. Internally, the QList is implemented using an array, ensuring that index-based access is very fast.Items can be added at either end of the list using QList::append() and QList::prepend(), or they can be inserted in the middle using QList::insert(). More than any other container class, QList is highly optimized to expand to as little code as possible in the executable. QStringList inherits from QList<QString>.
QLinkedList<T>This is similar to QList, except that it uses iterators rather than integer indexes to access items. It also provides better performance than QList when inserting in the middle of a huge list, and it has nicer iterator semantics. (Iterators pointing to an item in a QLinkedList remain valid as long as the item exists, whereas iterators to a QList can become invalid after any insertion or removal.)
QVector<T>This stores an array of values of a given type at adjacent positions in memory. Inserting at the front or in the middle of a vector can be quite slow, because it can lead to large numbers of items having to be moved by one position in memory.
QStack<T>This is a convenience subclass of QVector that provides “last in, first out” (LIFO) semantics. It adds the following functions to those already present in QVector: push(), pop(), and top().
QQueue<T>This is a convenience subclass of QList that provides “first in, first out” (FIFO) semantics. It adds the following functions to those already present in QList: enqueue(), dequeue(), and head().
QSet<T>This provides a single-valued mathematical set with fast lookups.
QMap<Key, T>This provides a dictionary (associative array) that maps keys of type Key to values of type T. Normally each key is associated with a single value. QMap stores its data in Key order; if order doesn’t matter QHash is a faster alternative.
QMultiMap<Key, T>This is a convenience subclass of QMap that provides a nice interface for multi-valued maps, i.e. maps where one key can be associated with multiple values.
QHash<Key, T>This has almost the same API as QMap, but provides significantly faster lookups. QHash stores its data in an arbitrary order.
QMultiHash<Key, T>This is a convenience subclass of QHash that provides a nice interface for multi-valued hashes.

迭代器类

Qt提供了多种风格的迭代器,Java风格和stl风格

Java风格迭代器

ContainersRead-only iteratorRead-write iterator
QList<T>, QQueue<T>QListIterator<T>QMutableListIterator<T>
QLinkedList<T>QLinkedListIterator<T>QMutableLinkedListIterator<T>
QVector<T>, QStack<T>QVectorIterator<T>QMutableVectorIterator<T>
QSet<T>QSetIterator<T>QMutableSetIterator<T>
QMap<Key, T>, QMultiMap<Key, T>QMapIterator<Key, T>QMutableMapIterator<Key, T>
QHash<Key, T>, QMultiHash<Key, T>QHashIterator<Key, T>QMutableHashIterator<Key, T>

STL风格迭代器

ContainersRead-only iteratorRead-write iterator
QList<T>, QQueue<T>QList<T>::const_iteratorQList<T>::iterator
QLinkedList<T>QLinkedList<T>::const_iteratorQLinkedList<T>::iterator
QVector<T>, QStack<T>QVector<T>::const_iteratorQVector<T>::iterator
QSet<T>QSet<T>::const_iteratorQSet<T>::iterator
QMap<Key, T>, QMultiMap<Key, T>QMap<Key, T>::const_iteratorQMap<Key, T>::iterator
QHash<Key, T>, QMultiHash<Key, T>QHash<Key, T>::const_iteratorQHash<Key, T>::iterator

Qt提供的其他容器

Qt includes three template classes that resemble containers in some respects. These classes don’t provide iterators and cannot be used with the foreach keyword.

  • QVarLengthArray<T, Prealloc> provides a low-level variable-length array. It can be used instead of QVector in places where speed is particularly important.
  • QCache<Key, T> provides a cache to store objects of a certain type T associated with keys of type Key.
  • QContiguousCache<T> provides an efficient way of caching data that is typically accessed in a contiguous way.
  • QPair<T1, T2> stores a pair of elements.

Additional non-template types that compete with Qt’s template containers are QBitArray, QByteArray, QString, and QStringList.

Qt容器算法复杂性

Algorithmic complexity is concerned about how fast (or slow) each function is as the number of items in the container grow. For example, inserting an item in the middle of a QLinkedList is an extremely fast operation, irrespective of the number of items stored in the QLinkedList. On the other hand, inserting an item in the middle of a QVector is potentially very expensive if the QVector contains many items, since half of the items must be moved one position in memory.

To describe algorithmic complexity, we use the following terminology, based on the “big Oh” notation:

  • Constant time: O(1). A function is said to run in constant time if it requires the same amount of time no matter how many items are present in the container. One example is QLinkedList::insert().
  • Logarithmic time: O(log n). A function that runs in logarithmic time is a function whose running time is proportional to the logarithm of the number of items in the container. One example is qBinaryFind().
  • Linear time: O(n). A function that runs in linear time will execute in a time directly proportional to the number of items stored in the container. One example is QVector::insert().
  • Linear-logarithmic time: O(n log n). A function that runs in linear-logarithmic time is asymptotically slower than a linear-time function, but faster than a quadratic-time function.
  • Quadratic time: O(n?). A quadratic-time function executes in a time that is proportional to the square of the number of items stored in the container.

The following table summarizes the algorithmic complexity of Qt’s sequential container classes:

 Index lookupInsertionPrependingAppending
QLinkedList<T>O(n)O(1)O(1)O(1)
QList<T>O(1)O(n)Amort. O(1)Amort. O(1)
QVector<T>O(1)O(n)O(n)Amort. O(1)

In the table, “Amort.” stands for “amortized behavior”. For example, “Amort. O(1)” means that if you call the function only once, you might get O(n) behavior, but if you call it multiple times (e.g., n times), the average behavior will be O(1).

The following table summarizes the algorithmic complexity of Qt’s associative containers and sets:

 Key lookupInsertion
AverageWorst caseAverageWorst case
QMap<Key, T>O(log n)O(log n)O(log n)O(log n)
QMultiMap<Key, T>O(log n)O(log n)O(log n)O(log n)
QHash<Key, T>Amort. O(1)O(n)Amort. O(1)O(n)
QSet<Key>Amort. O(1)O(n)Amort. O(1)O(n)

 

Techie亮博客,转载请注明:Coologic » Qt容器类汇总说明

Coologic 博客域名已更改,已从 www.techieliang.com 改为 www.coologic.cn,上述链接地址受到影响,若需查看源文请手动修改,多有不便,敬请谅解。
Qt 之 连续缓存QContiguousCache 背景 曾经面试遇到过面试官问这个问题:如何展示大量问题,当时简单说了下心里的想法,后来发现跟QContiguousCache有些类似,现在记录下来 问题描述: 当应用程序尤其是Gui程序,需要展示大量数据,例如QListview等,尤其实在内存是有限时。 QContiguousCache类是一个模板类,它提供了一个连续的高速缓存。 所述QContiguousCache类提供了一种在用户界面视图缓存用于显示项目的有效方式。与QCache不同,它增加了一个限制,即缓存中的元素是连续的。这具有匹配用户界面查看最 阅读详情

相关推荐

【QT】容器类

Qt 库提供了一组通用的基于模板的容器类。这些类可以用于存储指定类型的项目。例如,如果需要一个可调整大小的 QString 数组,可以使用 QVector。这些容器类设计得比 STL 容器更轻量、更安全且更易于使用。如果你不熟悉 STL,或者更喜欢“Qt 方式”的做法,可以使用这些类代替 STL 类。容器类是隐式共享的,它们是可重入的,并且经过优化以达到快速、低内存消耗和最小的内联代码扩展,从而生成更小的可执行文件。此外,在所有线程都将它们用作只读容器的情况下,它们是线程安全的。

Hi, Boy 1301

QPair的介绍及用法

QPair是一个模板类,它存储一对值(key,value),可以是不同的数据类型。

future_ai的博客 5856

【QT】容器类控件

qt中常用容器类控件,Group Box分组框,Tab Widget实现标签页,布局管理器:垂直布局,水平布局,网格布局,表单布局的核心属性与使用示例,以及QSpacerItem的用处

lzb_kkk的博客 1781

QT跨平台应用程序开发框架(9)—— 容器类控件

QGridLayout 用来实现网格布局的效果,可以达到 M * N 的这种网格效果,主要属性和 QHBoxLayout 类似,但是设置 spacing 的时候是按照垂直水平两个方向来设置的。每个 Widget 只能设置一个布局管理器, 但是可以通过拖拽方式创建两个布局遍历器,但是这样创建的布局管理器仅仅只会将内部控件重新组合位置,并不会像上面一样随着窗口大小改变。而容器内控件包含的直接就是我们前面介绍的一堆的控件。解答:我们前面使用ui创建界面时,都是手动拖拽方式来布局的,其实这种方式不科学。

aaqq800520的博客 1161

QT容器类

QT容器类,相对于C++的STL容器类,更为小巧、安全和方便使用。QT5在容器类里面做了优化速度、内存、inline等操作。 QT5容器类:QList、QLinkedList、QVector、QMap、QHash、QVariant类等。 QT5容器类中,容器可以存储的数据有: 1、基本数据类型,如int、float等。 2、QT的一些数据类型,比如QString、QDate、QTime等。 切记:...

link的博客,欢迎大家。 670

QT QList<T>介绍与应用、详解、使用说明、官方手册翻译

文章目录1. 简介2. 使用示例3. 官方手册4. Member Function Documentation 1. 简介 QList<T>是目前最常用的容器类 。它存储了给定类型的值的一个列表,而这些值可以通过索引访问。在内部,QList使用数组来实现,一确保进行快速的基于索引的访问。可以使用QList::append()和QList::prepend()在列表的两端添加项目,也可以使用QList::insert()在列表的中间插入项目。常用的QStringList继承自QList<QS

超级大洋葱的博客 6万+

C++ Qt开发:使用顺序容器类

Qt 中提供了丰富的容器类,用于方便地管理和操作数据。这些容器类涵盖了各种不同的用途,从简单的动态数组到复杂的映射和集合。本章我们将主要学习顺序容器,顺序容器是一组强大而灵活的数据结构,用于按照元素添加的顺序存储和管理数据。Qt提供了多种顺序容器,每种都具有独特的特性,这些容器包括向量、列表、队列、栈等,每种都有特定的适用场景。

微软技术分享 5641

Qt的QContiguousCache类的使用

与Qt中其他的容器类不同,QContiguousCache的实现方法更加注重数据的连续性,因此在实际应用中可以更高效地使用内存。除此之外,QContiguousCache还提供了一些其他的常用方法,例如removeFirst()、removeLast()等。综上所述,QContiguousCache作为QT中的一个容器类,具有很好的内存管理和优化能力,适合在需要高效处理大量数据时使用。在一些特殊的情况下,我们需要获取缓存中的原始数据,并进行修改。Qt的QContiguousCache类的使用。

uote_e的博客 472

【QT学习五】Qt 的容器类QList,QVector,QSet,QMap等

它可以存储任何类型的对象,并提供了许多实用的函数来方便地访问和操作列表中的元素。QSet是一个集合,它存储不同的值,并提供了许多函数来方便地访问和操作集合中的元素。注意:存储在Qt容器中的数据必须是可赋值的数据类型,Qt的Object类以及其子类是不能够存储在容器中的,但可以存储其指针。优点:支持高效的随机访问,可以快速插入和删除元素,可以保持元素的顺序。优点:支持高效的随机访问,可以快速插入和删除元素,可以保持元素的顺序。优点:支持高效的查找,插入和删除元素,可以保持元素的唯一性。

从此不归路 2805

QT的QContiguousCache类的使用

详细说明 QContiguousCache类是提供连续缓存的模板类。 QContiguousCache类提供了一种有效的方式来缓存项以在用户界面视图中显示。与QCache不同,它增加了一个限制,即缓存中的元素是连续的。这具有匹配用户界面如何查看最常见的请求数据的优势,这是围绕当前滚动位置定位的一组行。与QCache相比,此限制使缓存可以消耗更少的内存和处理器周期。 QContiguousCache以setCapacity()设置或作为参数传递给构造函数的固定容量运行。此容量是高速缓存本身对内存使用的上限,不

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1259

Nacos2.X 源码分析:为订阅方推送、服务健康检查、集群数据同步、grpc客户端服务端初始化

而Nacos2.X 从http请求改为了grpc请求的方式了,在健康检查这方面就是基于长连接来实现的。客户端发送心跳是在构建grpc连接时会有一个线程每隔5s发送一次,NacosClient端发送心跳的代码在。我们能大致猜测:当一个服务的实例进行了更新,那么是不是应该推送给所有订阅了该服务的客户端?当我订阅了某个服务,是不是应该将该服务信息推送给我?在服务实例检查检查流程中,如果出现了要注销的服务实例就会发布。在服务发现时,进行订阅服务的最后会发布一个。服务注册与服务订阅流程中发布的事件最终会被。

qq_44027353的博客 1594

【QT】常用控件 【多元素类 | 容器类 | 布局类】

本文详细介绍了Qt框架中常用的多元素类控件(如QListWidget、QTableWidget、QTreeWidget)、容器类控件(如QGroupBox、QTabWidget)以及布局类控件(如QVBoxLayout、QHBoxLayout、QGridLayout、QFormLayout)。通过代码示例和图形化界面操作,展示了如何使用这些控件创建高度定制化的用户界面,并强调了布局管理器在界面设计中的重要性。

You build it, you run it 7953

QGIS中高效处理CAD数据的两种实用技巧

本文详细解析了在QGIS中高效处理CAD数据的两种核心方法。针对DWG/DXF文件在QGIS中直接打开失败的问题,介绍了使用QGIS内置数据导入管理器进行标准化转换的流程,并重点推荐了功能更强大的Another DXF Importer插件,以更好地保留文字、块属性等复杂信息。文章对比了两种方法的优劣与适用场景,并提供了坐标系设置、中文乱码等常见问题的避坑指南,帮助用户根据数据需求选择最佳导入策略。

weixin_28363123的博客 117

Qt学习笔记1.3.1 Qt Core-容器类

Qt库提供基于模板的通用容器类,相比STL容器类更轻量化、安全和易用。容器类是隐式共享的、可重入的并且针对速度、低内存开销和最小内内联代码拓展进行了优化,这样实现了更小的可执行文件。此外。在某些情况下被用作只读容器时是线程安全的.为了访问容器内的项目,可以使用两种类型的迭代器:java风格迭代器和STL风格迭代器。java风格迭代器更易用而且提供高级功能。STL风格稍微更高效而且可以和QT和STL的泛型算法一起使用。QT还提供foreach关键字更方便地遍历容器。

qq_18466391的博客 1487

结构方程模型amos的操作与应用pdf_AMOS结构方程进行医学问卷量表分析教程(一阶简单路径效应分析)...

在生物医药的数据统计分析中,要研究量表和量表之间的关系时候,由于维度题项较多,而不再是单一的变量,因此我们要使用AMOS结构方程进行处理。​ 举个例子,比如对住院患者的相关研究,设置了患者在住院期间的适应性量表和自我效能的量表,想考察患者适应性与自我效能之间的影响关系,或者说适应性的强弱是否会影响到患者自我效能的高低。此时适应性量表和自我效能量表都不是单一的变量,而是有N个题项构成的...

weixin_39637614的博客 7711

Anolis 8系统下,手把手搞定Nginx、Redis、JDK8和Tomcat9的完整安装与配置(含开机自启)

本文详细介绍了在Anolis 8系统下搭建Java Web全栈环境的完整流程,包括JDK8、Tomcat9、Nginx和Redis的安装与配置,并实现系统级服务管理。通过深入每个组件的配置细节,揭示服务间的协同关系,最终打造一个生产级可用的标准化环境。

weixin_42556197的博客 159

Qt中的容器类

<!-- @page {margin:0.79in} p {margin-bottom:0.08in} --> Qt提供了两种类型的容器类:序列容器和关联容器。例如QVector,QLinkedList和QList属于序列容器,而QMap和QHash属于关联容器。 Qt提供了通用的算法,对这些容器类执行一些操作,如qSort()对一个序列容器进行排序,而qBinary

山庄来客的专栏 3054

人工智能之数学基础:弄懂数学本质,让我们不再害怕数学

数学的用途远远超过了人们的想象,甚至无处不在,任何领域都需要用到数学知识,人工智能也不例外。我将尽可能地将数学知识和机器学习算法相结合,让大家知道这些数学知识咋人工智能领域中的应用,使得数学的学习不会过于枯燥,同时也帮助大家扫清在学习算法过程中的数学障碍。除此之外,我还希望帮助大家建立一种不一样的数学思维,不再将数学看成是符号的演算、公式的推导,而是将数学看成是一种描述这个世界的工具,这样你就会发现这个世界处处有数学。当我们面对问题的时候,你是否会对问题进行抽象,然后通过数学来解决问题?

huanfeng_AI的博客 633

「QT」顺序容器类 之 QList 通用列表类

QList是Qt框架中提供的一个基于模板的通用容器类,它用于存储同一类型的元素序列。QList是一个动态数组,能够根据需要自动调整大小,且支持快速的随机访问。与QVector相比,QList在底层实现上使用了链表结构(虽然具体实现细节可能因Qt版本而异,但QList通常被认为在插入和删除操作上性能更优,而在随机访问上可能稍逊于QVector)。QList是Qt容器类库中的一个重要成员,广泛应用于图形界面编程、数据处理等场景。QList提供了多种构造函数,允许以不同的方式创建和初始化QList对象。

何曾参静谧的博客 2604

《Zephyr OS 入门与实战》第3章:第一个 Zephyr 程序 - Blinky 实战

解决方法:确认设备树overlay文件已正确加载。返回值,确认驱动初始化状态。

2301_79143213的博客 541

Linkage Mapper 工具参数详解——Building Network and Map Linkages

此文档用于解析使用LinkageMapper各输入输出参数详情以及可能的影响,并介绍了如何解释模型输出结果和输出参数,适合刚入手的人。篇幅很长很啰嗦,是因为每个参数都解释的万分细致。

sumuses的博客 6119

【QT】控件 -- 多元素类 | 容器类 | 布局类

该文章是关于 QT 控件的多元素类、容器类、布局类的补充

island1314的博客 2839

STM32开发 -- GPS模块开发详解

一、了解硬件 我使用的GPS模块型号为UBX-M8030 参看:UBX-M8030 系列 查看一下它的特性: 多用途 GNSS 芯片,提供三种产品等级 最多可并发接收 3 个 GNSS(GPS、伽利略、GLONASS、北斗) 行业领先的 -167 dBm 导航灵敏度 业界最低电流消耗 在城市峡谷中具有绝佳的定位精度 安全性和完整性保护 支持所有的卫星增强系统 车载级芯片的工作...

不积跬步,无以至千里 3万+

『 QT 』容器类控件

本文介绍了Qt中的QGroupBox控件及其应用。QGroupBox是一个带有标题的分组框,可用于将其他控件分组以优化布局和界面美观。文章对比了QGroupBox与QButtonGroup的区别,详细说明了QGroupBox的核心属性(如title、alignment、flat、checkable等)。通过一个点餐系统的代码示例,展示了如何使用QGroupBox进行分组布局,包括初始化控件、设计辅助函数、实时更新显示内容等功能。示例中还演示了checkable和flat属性的效果,展示了如何通过属性设置改变

小侯宝的博客 1378

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Qt 容器类+for循环

Qt容器类在多线程环境下,如果仅用于只读操作是线程安全的,但对容器的修改(如插入、删除、移动元素等)需要在适当的锁保护下进行。:使用完容器后,确保及时清理或删除不再使用的容器及其中的元素,尤其是在容器中有自定义对象时,避免内存泄漏。:与 QList 类似,但更适合在列表中间插入和删除元素,使用迭代器而非索引进行访问。:最常用的容器类,以数组的形式存储元素,支持快速的索引访问和在首尾插入元素。:与 QMap 类似,但使用哈希表实现,提供更快的查找速度。Qt 的容器类主要分为两大类:顺序容器和关联容器。

笔记本 1071

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: C++设计模式
下一篇: 《Effectirve C++》笔记
coologic
博客等级 码龄7年 35粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值