QT容器差别和选择策略(QT5.12)

QT容器差别和选择策略

容器类:
QList类是一个提供列表的模板类。
QList是Qt的通用容器类之一。它将项目存储在一个列表中,该列表提供基于索引的快速访问和基于索引的插入和删除。

QVector类是一个提供动态数组的模板类。
QVector是Qt的通用容器类之一。它将其项存储在相邻的内存位置,并提供基于索引的快速访问。

QLinkedList类是一个提供链接列表的模板类。
QLinkedList是Qt的通用容器类之一。它存储一个值列表,并提供基于迭代器的访问以及恒定时间的插入和删除。

QVector应该是默认的首选。
QVector通常会比QList提供更好的性能,因为QVector总是在内存中顺序存储其项,而QList将在堆上分配其项。
QVector实现的是一个数组,通过下标,拥有极快的访问速度。但是在插入删除上会根据实际情况消耗时间。
QList实现的是一个数组-链表结构(数组是索引index,链表是数据),所以QList的算法基于索引实现,支持方便的插入删除操作。
QLinkedList 则是一个真正的链表,它可以保证在中间列表中插入恒定的时间,并使用迭代器对项目而不是索引进行迭代器。
根据基本容器的性能,选取策略为:
需要存储一些背景数据,数据尺寸一般不会变化,然后经常需要查询,则使用QVector;
存储中间变量,适用于不同层次的接口,作为参数等,需要经常被构造,增加、删除元素等操作,则使用QList;
经常需要对容器进行大尺度的长度变化,使用QLinkedList;

//其他特定容器:
QQueue类是一个提供队列的通用容器。
QQueue是Qt的通用容器类之一。它为相同类型的项目实现了队列数据结构。队列是先进先出(FIFO)结构。

QStack类是一个提供堆栈的模板类。
QStack是Qt的通用容器类之一。它为相同类型的项实现堆栈数据结构。堆栈是后进先出(LIFO)结构。

QSet 类是一个模板类,提供基于哈希表的集合。
QSet是Qt的通用容器类之一。它以未指定的顺序存储值,并提供非常快速的值查找。
QSet不允许有重复的值,QSet由于通过Hash实现,没有顺序,只能通过迭代器遍历

特定容器有很明显的特征,当实际需求满足特征的时候,就可以选择。



关联容器类:
QHash类是一个模板类,提供基于哈希表的字典。
QHash<Key,T>是Qt的通用容器类之一。它存储(键、值)对,并提供与键关联的值的快速查找。

QMap类是一个模板类,它提供了一个基于红黑树的字典。
QMap<Key,T>是Qt的通用容器类之一。它存储(键、值)对,并提供与键关联的值的快速查找。

QHash提供了比QMap更快的查找速度。
在QMap上迭代时,项目总是按键排序。使用QHash,项目可以任意排序。

根据不同的属性,选取策略为:
由于QHash更快,那么能使用QHash就不适用QMap;
由于QHash是无序表,所以根据实际情况,如果需要顺序,则使用QMap,不需要则使用QHash

//其他特定关联容器:
QMultiMap类是一个方便的QMap子类,提供多值映射。
QMultiMap<Key,T>是Qt的通用容器类之一。它继承了QMap,并通过几个方便的函数对其进行了扩展,
使其比QMap更适合存储多值映射。多值映射是允许多个值具有同一密钥的映射;QMap通常不允许这样做,除非调用QMap::insertMulti()。

QMultiHash类是一个方便的QHash子类,提供多值哈希。
QMultiHash<Key,T>是Qt的通用容器类之一。它继承了QHash,并通过几个方便的函数对其进行了扩展,
使其比QHash更适合存储多值散列。多值散列是允许使用同一密钥的多个值的散列;QHash通常不允许这样做,除非调用QHash::insertMulti()。

特定容器有很明显的特征,当实际需求满足特征的时候,就可以选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt 5.15和Qt 5.12之间有一些重要的区别。以下是一些主要的区别: 1. 新功能和改进:每个Qt版本都引入新的功能和改进,以提供更好的开发体验和性能优化。Qt 5.15相对于Qt 5.12引入了许多新功能,比如Qt Quick 3D、QtWebEngine更新、QtCharts的改进、Qt Virtual Keyboard的增强等。具体的改进取决于你使用的模块和功能。 2. 维护和支持:Qt版本通常得到一段时间的维护和支持。Qt 5.15是一个长期支持(LTS)版本,意味着它得到长时间的支持和更新,包括错误修复和安全补丁。而Qt 5.12则是一个先前的LTS版本,也有限度地得到维护和支持。 3. 兼容性:新版本可能引入了一些不兼容的改变。如果你的项目是基于Qt 5.12构建的,升级到Qt 5.15可能需要进行一些代码调整和测试,以确保兼容性。 4. 性能优化:每个新版本都可能带来一些性能优化,如更快的启动时间、更高效的资源管理等。因此,Qt 5.15可能在性能方面有一些改进,但具体效果取决于你的具体使用情况。 综上所述,Qt 5.15相对于Qt 5.12引入了许多新功能和改进,并提供了长期支持。但升级到新版本可能需要考虑兼容性和适配工作。如果你的项目已经在Qt 5.12上运行良好,并且没有迫切需要新功能或长期支持的要求,那么继续使用Qt 5.12也是可以的。否则,可以考虑升级到Qt 5.15以获得最新的功能和支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值