当前位置: 首页 > 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*>

相关文章:

  • 类复制.省略 class.copy.elision
  • Qt工作总结06 < QMap<> 和QVector<QPair>、以及QPair<>和QMakePair<> >
  • 远程io模块在汽车流水线的应用
  • 【Python】Python办公自动化需要你了解什么?会什么?
  • AI 赋能 Java 开发:从通宵达旦到高效交付的蜕变之路
  • DD3118完整版参数规格书|DD3118 3.0读卡器控制方案|DD3118高速3.0读卡器芯片
  • BTREE存储结构
  • Android 10.0 勿扰模式开启关闭功能实现
  • Node.js:开启现代服务器端编程的新篇章
  • Odoo 17 在线聊天报错 “Couldn‘t bind the websocket...“ 的解决方案
  • 单链表专题
  • 我的世界进阶模组开发教程——制作机械动力附属模组
  • 避坑:启动sdk-c demo master需要注意的事情
  • 技术栈CMake的介绍和使用
  • 如何设计三高架构
  • TiDB 上线步骤是怎么样?怎么做到数据不丢失?怎么保证可靠性?
  • 火山引擎发布豆包大模型 1.6 与视频生成模型 Seedance 1.0 pro
  • cmake 编译grpc
  • Decode Valid Comma Only说明
  • linux引导过程与服务控制
  • 企业自助建站系统下载/手机端竞价恶意点击能防止吗
  • 盘古网做网站多少钱/12月30日疫情最新消息
  • 网站建设服务条款/seo外包服务
  • 做减肥餐的网站/长沙网站推广 下拉通推广
  • 山西网络营销推广seo/郑州搜狗关键词优化顾问
  • 做网站的软件叫code/推广软件赚钱的平台