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

QMultiMapQHashQList使用区别

QMultiMap&QHash&QList使用区别

场景:如何在一个集合中存储所有打开的 UI,并高效判断是否存在标题为 “abc” 的窗口?

✅ 1. 使用 QList<QWidget*>
示例代码:

QList<QWidget*> uiList;// 判断是否存在 title == "abc" 的窗口
bool found = std::any_of(uiList.begin(), uiList.end(), [](QWidget* w) {return w && w->windowTitle() == "abc";
});

✅ 优点:
简单直接。

支持重复窗口。

遍历方便。

❌ 缺点:
查找是线性复杂度 O(n),窗口多时性能下降。

不支持通过标题快速定位窗口。

✅ 适用场景:
窗口不多时使用最合适。

有可能存在多个标题相同的窗口。

✅ 2. 使用 QMap<QString, QWidget*> (key 是标题)
示例代码:

QMap<QString, QWidget*> uiMap;
uiMap.insert("abc", someWindow);// 判断是否存在标题为 "abc"
bool found = uiMap.contains("abc");

✅ 优点:
查找复杂度为 O(log n)。

可直接通过标题定位窗口。

❌ 缺点:
标题不能重复,否则会覆盖。

不适合多个窗口标题相同的情况。

✅ 适用场景:
每个窗口标题唯一(如管理不同模块窗口)。

✅ 3. 使用 QMultiMap<QString, QWidget*>(支持多个同名窗口)
示例代码:

QMultiMap<QString, QWidget*> uiMultiMap;
uiMultiMap.insert("abc", w1);
uiMultiMap.insert("abc", w2); // 支持同名// 判断是否有 "abc" 标题窗口
bool found = uiMultiMap.contains("abc");

✅ 优点:
支持同名窗口。

依然可通过 key 快速查找。

❌ 缺点:
取出所有相同 key 的窗口需 values(“abc”)。

写法比 QList 稍复杂。

✅ 适用场景:
有多个同名窗口,但需要分类管理。

✅ 4. 使用 QHash<QString, QWidget*>
同 QMap,只是底层用哈希,查找是 O(1)。

示例代码:

QHash<QString, QWidget*> uiHash;
uiHash.insert("abc", someWindow);
bool found = uiHash.contains("abc");

✅ 优点:
查找是常数时间,性能最优。

❌ 缺点:
同样不能重复 key。

容器类型是否支持重复标题查找性能适用场景描述
QList<QWidget*>✅ 支持❌ O(n)最通用,窗口少时简单方便
QMap<QString, QWidget*>❌ 不支持✅ O(log n)窗口标题唯一
QMultiMap<QString, QWidget*>✅ 支持✅ O(log n)有多个同名窗口时
QHash<QString, QWidget*>❌ 不支持✅ O(1)标题唯一 + 性能敏感场景

✨ 建议选择:
✅ 少量窗口 + 简单需求 → 用 QList<QWidget*>

✅ 需要快速查找且标题唯一 → 用 QHash<QString, QWidget*>

✅ 同名窗口 + 分类管理 → 用 QMultiMap<QString, QWidget*>

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

相关文章:

  • 中学教资考试面试回忆
  • 学车笔记 变挡
  • 图数据库的理解
  • Python打卡第51天
  • n8n部署步骤
  • AI Engine Kernel and Graph Programming--知识分享9
  • PostgreSQL --数据库操作
  • libyuv的三种缩放模式
  • Verilog:流水线乘法器
  • 【热更新知识】学习三 XLua学习
  • 我们来学mysql -- 8.4版本记录慢查询
  • 1.对结构学习的整体构想
  • 教师端用户操作手册
  • Smartbi双产品线功能更新:主动分析更省心,数据治理更高效
  • tableau 实战工作场景专业仪表盘的搭建(整体思路)详解
  • CMake指令:aux_source_directory
  • RFID测温芯片在新能源电池管理中的创新应用
  • 11. 线性表的顺序表示和实现(3)
  • AI视频生成API:一站式视频生成解决方案
  • JAVA(Day_4
  • 网络管理【Linux/Unix/Windows】命令大全
  • 保障信号纯净:线材滤波器在复杂电磁环境中的作用
  • Java 8 Stream 流全面使用教程 - 完整版
  • 肩胛骨髓外浸润
  • Android11 Launcher3实现去掉抽屉改为单层
  • 汇编(cpu寄存器描述)
  • 字符串和内存函数(2)
  • MacBook M1 Pro下载安装MySql
  • Redis分布式缓存(RDB、AOF、主从同步)
  • force命令的使用