Qt工作总结06 < QMap<> 和QVector<QPair>、以及QPair<>和QMakePair<> >

QMap<type,type>和QVector<QPair<type,type>>区别和优缺点

------ 本文为学习笔记,如有疑问欢迎指出~


一、QMap<>和QVector<QPair<>>

1. 数据结构本质

① 底层实现:

  • QMap:红黑树(平衡二叉搜索树)
  • QVector<QPair>:动态数组

② 排序方式:

  • QMap:按键key自动排序
  • QVector<QPair>:保持插入顺序

③ 键唯一性:

  • QMap:自动去重
  • QVector<QPair>:允许重复键

④ 内存布局:

  • QMap:非连续内存
  • QVector<QPair>:连续内存

2. 推荐使用场景

二、 QMakePair<>和QPair<>

1. QPair< >

  • 定义:Qt提供的一个模板,用于存储一对值(eg: std::pair)
cpp 复制代码
template <typename T1,typename T2> class QPair;
  • 构造:
cpp 复制代码
// 直接构造
QPair<double, QString> valueLabel(3.14, "Pi");

// 使用构造函数
QPair<double, QString> valueLabel = QPair<double, QString>(3.14, "Pi");
  • 存储\访问:存储两个值(first,second)
cpp 复制代码
QPair<int, QString> pair(42, "Answer");
int a = pair.first;        // 42
QString b = pair.second;   // "Answer"
  • 优点:

① 类型安全,明确指定两个值的类型;

② 直接访问,通过 .firat和 .second直接访问成员;

③ 标准兼容,与Qt容器(如QVector、QList)无缝集成;

④ 内存高效,没有额外开销,只存储两个值。

  • 缺点:

① 冗长,需要显示指定模板参数类型;

② C++ 11前不能使用自动类型推导;

2. QMakePair< >

  • 定义:是一个模板函数,用于创建QPair对象
cpp 复制代码
template <typename T1, typename T2> 
QPair<T1, T2> qMakePair(const T1 &value1, const T2 &value2) {
    return QPair<T1, T2>(value1, value2);
}
  • 特点:

① 工厂函数:创建并返回QPair对象;

② 类型推导:自动推导模板参数类型;

  • 使用:
cpp 复制代码
auto pair = qMakePair(42, "Answer");
  • 优点:代码简洁清晰
cpp 复制代码
// 简洁写法
lst.append(qMakePair(value, label));
  • 缺点:

① 间接性:多一层函数调用;

② 类型模糊:可能不如显式指定精确;

③ C++ 11后有更简洁的方式替代如下

cpp 复制代码
// C++11 替代写法
lst.append({value, label}); 

3. 对比

4. C++ 11及以后替代建议

cpp 复制代码
// 列表初始化(最简洁)
lst.append({value, label});

// 结构化绑定(C++17)
for (const auto &[val, lbl] : lst) {
    // 使用 val 和 lbl
}

5. 直接使用QPair的场景

cpp 复制代码
// 当需要明确指定类型时(如类型转换)
lst.append(QPair<double, QString>
    
    (static_cast<double>(intValue), 
     QString::number(intValue)
));

// 当自动类型推导不符合预期时
相关推荐
遇见尚硅谷3 小时前
C语言:*p++与p++有何区别
c语言·开发语言·笔记·学习·算法
艾莉丝努力练剑4 小时前
【数据结构与算法】数据结构初阶:详解排序(二)——交换排序中的快速排序
c语言·开发语言·数据结构·学习·算法·链表·排序算法
jz_ddk4 小时前
[HarmonyOS] 鸿蒙LiteOS-A内核深度解析 —— 面向 IoT 与智能终端的“小而强大”内核
物联网·学习·华为·harmonyos
试着4 小时前
零基础学习性能测试第五章:Tomcat的性能分析与调优-Tomcat原理,核心配置项,性能瓶颈分析,调优
学习·零基础·tomcat·性能测试
老虎06275 小时前
JavaWeb(苍穹外卖)--学习笔记13(微信小程序开发,缓存菜品,Spring Cache)
笔记·学习·微信小程序
@蓝莓果粒茶6 小时前
LeetCode第350题_两个数组的交集II
c++·python·学习·算法·leetcode·职场和发展·c#
无名工程师6 小时前
AI 学习过程中各阶段的学习重点、时间规划以及不同方向的选择与建议等内容
人工智能·学习
试着7 小时前
零基础学习性能测试第五章:JVM性能分析与调优-垃圾回收器的分类与回收
jvm·学习·零基础·性能测试·垃圾回收器
livemetee7 小时前
Flink2.0学习笔记:Stream API 常用转换算子
大数据·学习·flink
WXX_s7 小时前
【OpenCV篇】OpenCV——03day.图像预处理(2)
人工智能·python·opencv·学习·计算机视觉