Table of Contents:

分类 Qt 集合类 对应的 C++ STL 类 主要特点(Qt) 主要特点(STL) 使用建议
顺序容器(Sequence) QVector<T> std::vector<T> 连续内存、支持隐式共享、快速随机访问 连续内存、标准性能最高、支持算法库 Qt 环境下优选 QVector,算法模块用 std::vector
QList<T> (Qt6≈QVector) std::vector<T> / std::deque<T> Qt5 时为混合结构、Qt6 改为连续数组、兼容性好 动态数组或双端队列实现、性能稳定 建议新代码使用 QVector 替代 QList
QLinkedList<T>(Qt6 已弃用) std::list<T> / std::forward_list<T> 传统链表实现,随机访问慢 双向/单向链表,插入删除快 推荐使用 std::list,Qt 已弃用
QStringList std::vector<std::string> 方便字符串处理,与 QString 无缝集成 需手动转换字符串类型 GUI 程序推荐使用
QByteArray std::vector<char> / std::string 专为字节流、二进制数据设计 可通用但语义不清晰 处理二进制/网络数据优选
关联容器(Associative) QMap<Key,Val> std::map<Key,Val> 有序映射、基于红黑树、隐式共享 有序映射、红黑树实现、STL标准兼容 对 Qt 对象映射使用 QMap
QMultiMap<Key,Val> std::multimap<Key,Val> 支持键重复、有序 同上 同上
QHash<Key,Val> std::unordered_map<Key,Val> 哈希表实现、平均 O(1) 查找 哈希表、平均 O(1)、泛型算法兼容 性能敏感时两者皆可
QMultiHash<Key,Val> std::unordered_multimap<Key,Val> 支持键重复、无序 支持键重复、无序 同上
QSet<Key> std::unordered_set<Key> / std::set<Key> 基于 QHash 实现、无序集合 有序或无序集合可选 通常选 QSetstd::unordered_set
特殊容器 QVarLengthArray<T,N> 无直接对应(类似 std::array + 动态扩展) 小型动态数组,性能极高 - 嵌入式或高性能代码推荐
QCache<Key,Val> 无直接对应 带缓存回收机制(LRU) - 缓存场景专用
内存与拷贝机制 隐式共享(Copy-on-Write 深拷贝(值语义) 拷贝开销小、写时复制 拷贝立即复制数据 Qt 容器更适合频繁拷贝场景
线程安全性 读操作线程安全(原子引用计数) 非线程安全 可多线程读、写需加锁 用户手动加锁 Qt 多线程环境更友好
算法兼容性 不兼容 <algorithm> 泛型算法 完全兼容 <algorithm> 使用方便但灵活性低 泛型算法强大 算法部分推荐使用 STL
迭代器风格 QListIterator, QMutableListIterator iterator, const_iterator Qt 风格接口更直观 STL 标准语法、通用性强 依使用习惯选择
API 风格 append(), removeAt(), contains() push_back(), erase(), find() 更接近自然语言 更贴近标准库规范 Qt GUI 推荐 Qt 风格
性能取向 兼顾易用性与 Qt 兼容性 注重性能与算法泛用性 内存稳定、二进制兼容 性能更优、标准一致 综合考虑使用场景
典型使用场景 GUI、信号槽、QML、QVariant 集成 算法库、数值计算、第三方库交互 与 Qt 框架无缝衔接 跨平台兼容性与性能更强 GUI → Qt,逻辑层 → STL
互操作 提供 toStdVector(), fromStdVector() 等函数 手动转换 与 STL 可互转 与 Qt 可互转 模块边界处灵活切换

参考链接