QT6(19)3.4 容器类:课堂笔记,顺序容器 QList<T>、QStack、QQueue,关联容器 QMap、QMultiMap、QHash、QMultiHash、QSet,

(61)课堂笔记 ,谢谢老师
在这里插入图片描述

++

在这里插入图片描述
++

在这里插入图片描述

(62) 关联容器

在这里插入图片描述

(63)

谢谢

### 使用 `QMap<QString, std::function<QMultiHash<QString, QList<QString>>*()>>` 进行数据删减操作 在使用 `QMap<QString, std::function<QMultiHash<QString, QList<QString>>*()>>` 存储多个 `QMultiHash<QString, QList<QString>>` 实例时,可以通过键值选择特定的 `QMultiHash` 成员,并对其执行数据删减操作。这种结构允许通过函数对象动态生成哈希表实例,适用于延迟初始化或按需生成数据的场景。 当需要对某一组 `QMultiHash` 数据进行删减时,应首先调用函数生成对应的实例,然后使用 `QMultiHash::remove()` 方法删除特定键或键值对。例如: ```cpp QMap<QString, std::function<QMultiHash<QString, QList<QString>>*()>> hashFactoryMap; // 注册策略 hashFactoryMap["strategy1"] = []() { return new QMultiHash<QString, QList<QString>>(); }; // 获取并操作实例 QMultiHash<QString, QList<QString>>* hash = hashFactoryMap["strategy1"](); hash->insert("key1", {"value1", "value2"}); hash->insert("key2", {"value3"}); // 删除键值对 hash->remove("key1"); // 删除所有与 key1 相关的值 ``` 此方式确保在调用函数生成实例后,可以对特定键的数据进行删除操作[^1]。 ### 数据删减的注意事项 由于 `QMultiHash` 支持一键多值的存储方式,若需删除特定键下的某个具体值,应使用 `QMultiHash::remove(const QString& key, const QList<QString>& value)` 方法: ```cpp hash->remove("key2", {"value3"}); // 仅删除 key2 对应的 value3 ``` 这种方式适用于需要精确控制删除操作的场景,确保不会误删其他值[^1]。 此外,由于 `QMap` 中存储的是函数对象,实际生成的 `QMultiHash` 实例的生命周期需要手动管理。在删除键值对后,若不再需要整个 `QMultiHash` 实例,应手动调用 `delete` 释放内存,避免内存泄漏: ```cpp delete hash; ``` 为避免悬空指针问题,删除实例后应确保不再访问该指针[^1]。 ### 数据结构使用的验证与建议 在实际使用过程中,应确保每次调用函数生成的 `QMultiHash` 实例是唯一的,避免重复调用导致多个实例被创建而无法统一管理。为增强代码的健壮性,建议将 `QMultiHash` 实例封装在智能指针中,例如 `QSharedPointer`,从而实现自动内存管理: ```cpp hashFactoryMap["strategy1"] = []() { return QSharedPointer<QMultiHash<QString, QList<QString>>>(new QMultiHash<QString, QList<QString>>()); }; ``` 该方式利用智能指针特性,在对象不再被引用时自动释放内存,提升程序的安全性和可维护性。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangzhangkeji

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值