当前位置: 首页 > java >正文

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)
template <typename T1,typename T2> class QPair;
  • 构造:
// 直接构造
QPair<double, QString> valueLabel(3.14, "Pi");// 使用构造函数
QPair<double, QString> valueLabel = QPair<double, QString>(3.14, "Pi");
  • 存储\访问:存储两个值(first,second)
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对象
template <typename T1, typename T2> 
QPair<T1, T2> qMakePair(const T1 &value1, const T2 &value2) {return QPair<T1, T2>(value1, value2);
}
  • 特点:

        ① 工厂函数:创建并返回QPair对象;
        ② 类型推导:自动推导模板参数类型;

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

        ① 间接性:多一层函数调用;
        ② 类型模糊:可能不如显式指定精确;
        ③ C++ 11后有更简洁的方式替代如下

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

3. 对比

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

// 列表初始化(最简洁)
lst.append({value, label});// 结构化绑定(C++17)
for (const auto &[val, lbl] : lst) {// 使用 val 和 lbl
}

5. 直接使用QPair的场景

// 当需要明确指定类型时(如类型转换)
lst.append(QPair<double, QString>(static_cast<double>(intValue), QString::number(intValue)
));// 当自动类型推导不符合预期时

http://www.xdnf.cn/news/13479.html

相关文章:

  • Windows 安装以及配置Docker全流程 - Docker Toolbox
  • 聊天室项目多进程纯C版
  • JAVA学习
  • 粉尘检测仪监测技术方案
  • 黑马教程强化day2-2
  • 新闻类鸿蒙应用全链路运维指南:高并发场景下的稳定保障
  • Android的Dalvik和ART
  • 树莓派超全系列教程文档--(64)rpicam-apps可用选项介绍之相机控制选项
  • 顶级视频生成大模型分析:Seedance 1.0 Pro (字节跳动) - 新晋榜首
  • 洛谷B3612 【深进1.例1】求区间和
  • 论文笔记 -《MegaBlocks- Efficient Sparse Training with Mixture-of-Experts》
  • 【Cross-Language Binary-Source Code Matching with Intermediate Representations】
  • SD卡及FATFS文件系统
  • 马里兰大学:LLM过度思考降低性能
  • 打卡第42天:简单CNN
  • PyTorch 中torch.einsum函数的使用详解和工程应用示例
  • QML显示图片问题解决办法
  • IDEA的git提交代码提交失败,有错误0 个文件已提交,1 个文件提交失败:
  • 双路 CPU 物理服务器租用服务
  • 鹰盾视频加密器Windows播放器禁止虚拟机运行的技术实现解析
  • 青藏高原ASTER_GDEM数据集(2011)
  • Linux C学习路线全概括及知识点笔记3-网络编程
  • AI 视频创作技术全解析:从环境搭建到实战落地​
  • 2025年的WWDC所更新的内容
  • JS 原型与原型链详解
  • mac redis以守护进程重新启动
  • MySQL之事务与视图
  • 【笔记】Kubernetes 中手动及自动化证书更换步骤及注意事项
  • 如何开启自己计算机远程桌面连接功能? 给别人或异地访问
  • 8.Vue的watch监视