跳转至

Qt数据结构

QList、QVector、QStack、QQueue

在 Qt 6 里,QVector 已经是 QList 的别名,两者底层实现统一,语义上可以认为是同一个顺序容器。它们的数据按连续内存存放,适合下标访问、尾部追加和一般场景使用。

Qt 官方现在也明确把 QList<T> 对应到接近 std::vector<T> 的定位。QStackQQueue 则不是独立底层结构,本质上只是基于 QList 提供了“栈接口”和“队列接口”的封装。

QHash

QHash 是哈希表,核心特点是按键做快速查找。它追求的是平均意义上的高效插入、删除和查询,适合“通过 key 快速定位 value”的场景。它不保证元素有序,遍历顺序也不应依赖。

实际理解上,它对应的是 Qt 风格的无序关联容器,定位接近 std::unordered_map

QMap

QMap 是有序映射,内部按 key 排序保存。它的重点不是极致查找速度,而是“键有序”,因此适合需要范围查找、顺序遍历、或希望结果天然按 key 排列的场景。

实际理解上,它对应的是 Qt 风格的有序关联容器,定位接近 std::map

QSet

QSet 本质上是“只存 key、不存 value”的哈希集合,用来表示一组不重复元素。它关注的是成员是否存在,以及快速插入、删除、去重。

可以把它理解成建立在哈希表思想上的集合容器,定位接近 std::unordered_set

QLinkedList

QLinkedList 是链表容器,强调中间位置插入和删除时的链表语义。但在 Qt 6 中,它已经被归到 Qt5 Core Compatibility APIs,说明它主要是兼容旧代码用;

Qt 官方也明确写了,大多数场景下应优先使用 QList,只有在你确实需要“真正链表”的语义和特性时才考虑它。 :contentReference[oaicite:1]{index=1}