QMultiMap使用详解
- 一、QMultiMap特性
- 二、创建和初始化
- 2.1 创建空的 `QMultiMap`
- 2.2 使用初始值创建 `QMultiMap`
- 三、插入和移除数据
- 3.1 插入数据
- 3.2 移除数据
- 四、查找和遍历数据
- 4.1 查找某个键的所有值
- 4.2 查找某个键对应的第一个值
- 4.3 查找某个值对应的所有键
- 4.4 检查是否包含某个键或键值对
- 五、遍历数据
- 5.1 遍历所有键值对
- 5.2 遍历特定键的所有值
- 六、其他操作
- 6.1 获取所有键
- 6.2 获取所有值
- 6.3 清除所有数据
- 总结
QMultiMap
是 Qt 提供的一个容器类,用于存储键值对,其中一个键可以对应多个值。它是基于
QMap
实现的,支持快速查找和插入操作。
QMultiMap
的主要用途是在需要存储具有相同键的多个值时,提供便捷的操作接口。
一、QMultiMap特性
QMultiMap
是Qt提供的一个容器类,用于存储键值对,支持同一个键存储多个值。它基于红黑树实现,提供了有序的键值对存储。以下是 QMultiMap
的主要特性和用法:
-
主要特性
-
多值存储:
QMultiMap
允许同一个键存储多个值。这使得它特别适用于需要为单个键存储多个相关值的场景,例如一对多的关系。 -
有序存储:
QMultiMap
基于红黑树实现,键值对按键的顺序存储。因此,遍历键值对时,键是按顺序排列的。 -
模板类:
QMultiMap
是一个模板类,可以存储任意类型的键和值。键和值的数据类型可以是基本数据类型、自定义类型等。 -
高效的查找、插入和删除:
基于红黑树的数据结构,使得QMultiMap
提供了高效的查找、插入和删除操作。其时间复杂度通常为 O(log n)。 -
迭代器支持:
QMultiMap
提供了迭代器接口,可以方便地遍历所有存储的键值对。 -
查找操作:
提供了一系列查找操作,如find()
,value()
,values()
,keys()
,contains()
,count()
等,用于获取键对应的一个或多个值。
-
二、创建和初始化
2.1 创建空的 QMultiMap
QMultiMap<QString, int> map;
2.2 使用初始值创建 QMultiMap
QMultiMap<QString, int> map;
map.insert("a", 1);
map.insert("a", 2);
map.insert("b", 3);
三、插入和移除数据
3.1 插入数据
可以使用 insert
方法将键值对插入到 QMultiMap
中:
map.insert("a", 1);
map.insert("a", 2);
map.insert("b", 3);
3.2 移除数据
可以使用 remove
方法移除特定键的所有值,或使用 remove
方法移除特定键值对:
map.remove("a"); // 移除键 "a" 的所有值
map.remove("b", 3); // 移除键 "b" 对应的值 3
四、查找和遍历数据
4.1 查找某个键的所有值
使用 values
方法可以返回一个包含指定键的所有值的列表:
QList<int> values = map.values("a");
4.2 查找某个键对应的第一个值
使用 value
方法可以返回指定键对应的第一个值:
int value = map.value("a");
4.3 查找某个值对应的所有键
使用 keys
方法可以返回包含指定值的所有键的列表:
QList<QString> keys = map.keys(2);
4.4 检查是否包含某个键或键值对
使用 contains
方法可以检查 QMultiMap
中是否包含指定的键或键值对:
bool hasKey = map.contains("a");
bool hasKeyValue = map.contains("a", 1);
五、遍历数据
5.1 遍历所有键值对
使用范围循环或迭代器遍历 QMultiMap
中的所有键值对:
for (auto it = map.cbegin(); it != map.cend(); ++it) {qDebug() << it.key() << ":" << it.value();
}
5.2 遍历特定键的所有值
QString key = "a";
for (auto it = map.find(key); it != map.end() && it.key() == key; ++it) {qDebug() << it.value();
}
六、其他操作
6.1 获取所有键
使用 keys
方法可以返回 QMultiMap
中所有键的列表:
QList<QString> allKeys = map.keys();
6.2 获取所有值
使用 values
方法可以返回 QMultiMap
中所有值的列表:
QList<int> allValues = map.values();
6.3 清除所有数据
使用 clear
方法可以清空 QMultiMap
中的所有键值对:
map.clear();
- 示例代码
下面是一个完整的示例,演示了 QMultiMap
的基本用法:
#include <QCoreApplication>
#include <QMultiMap>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建 QMultiMap 并插入数据QMultiMap<QString, int> map;map.insert("a", 1);map.insert("a", 2);map.insert("b", 3);// 遍历所有键值对qDebug() << "All key-value pairs:";for (auto it = map.cbegin(); it != map.cend(); ++it) {qDebug() << it.key() << ":" << it.value();}// 查找键 "a" 的所有值QList<int> values = map.values("a");qDebug() << "Values for key 'a':" << values;// 移除键 "b" 的值 3map.remove("b", 3);// 检查键 "b" 是否存在bool hasKeyB = map.contains("b");qDebug() << "Map contains key 'b':" << hasKeyB;// 清空所有数据map.clear();qDebug() << "Map size after clear:" << map.size();return a.exec();
}
总结
QMultiMap
是一个非常有用的容器类,适用于需要一个键对应多个值的场景。通过提供插入、移除、查找和遍历等操作接口,使得对键值对的管理变得简单而高效。在使用 QMultiMap
时,可以灵活地操作数据,并且支持快速的查找和插入操作。
其他QT文章
1. QT开发环境安装以配置。
2. QT线段画板实战
3. 半小时玩转QT桌面系统托盘(含托盘消息)
4. QT入门开发一个时钟
5. 半小时教你做大转盘游戏(QT篇)
6. 手把手教你制作【带吸附效果的线段绘制】(QT)
7. 手把手教你开发-滚动效果号码抽奖(QT)
8. 100行代码实现贪吃蛇小游戏
9.C++实现《扫雷》游戏(入门经典)
10. svg转图片工具开发
11. Qt网路与通信(获取本机网络信息)
12. Qt网路与通信(UDP客户与服务)
13. Qt网络与通信(TCP聊天室)
14. Qt多线程以及线程池
15. Qt散点图、折线图、柱状图、盒须图、饼状图、雷达图开发实例
16. 取色器(QT)
17. MQTT客户端入门开发
18.QT文件上传带进度条实例(含源码)
19. Qt音乐播放器开发实例(可毕设含源码)