Qt
、
QMultiMap
、
容器
、
键值
、
键值重复
今天在观摩小伙伴撸代码的时候,突然听到了QMultiMap自己使用Qt开发这么就,竟然都不知道,所以趁没有被人发现自己是个水货,赶紧补充一下知识点。今天就学习一下QMultiMap。
QMultiMap 是 Qt 框架中的一个容器类,用于存储键值对的多重映射。它可以存储多个具有相同键的值,并且可以按照键的顺序进行访问和遍历。
QMultiMap 提供了一系列的方法来操作和管理键值对。你可以使用 insert() 方法向 QMultiMap 中插入键值对,如果键已经存在,那么该值将会被添加到已有的键值对列表中。你还可以使用 remove() 方法来删除指定键值对,或者使用 clear() 方法来清空整个 QMultiMap。
QMultiMap 还提供了一些方便的方法来访问和遍历键值对。你可以使用 values() 方法获取指定键对应的所有值的列表,或者使用 keys() 方法获取所有键的列表。此外,你还可以使用 find() 方法来查找指定键对应的值,或者使用 contains() 方法来检查 QMultiMap 是否包含指定的键。
总之,QMultiMap 是一个非常实用的容器类,适用于需要存储多个具有相同键的值的场景。它提供了丰富的方法来操作和管理键值对,方便快捷地进行访问和遍历。
QMultiMap 的特点如下:
多重映射:QMultiMap 允许存储多个具有相同键的值。这意味着你可以将多个值与同一个键相关联,而不仅限于一个值。
键的顺序:QMultiMap 会按照键的顺序来存储键值对。这意味着你可以按照键的顺序进行访问和遍历,而不会丢失原始的键值对顺序。
动态大小:QMultiMap 的大小是动态的,可以根据需要进行扩展或收缩。你可以根据实际情况插入或删除键值对,而不需要提前指定容器的大小。
方便的插入和删除:QMultiMap 提供了方便的方法来插入和删除键值对。你可以使用 insert() 方法来插入键值对,如果键已经存在,那么该值将会被添加到已有的键值对列表中。你还可以使用 remove() 方法来删除指定键值对。
快速查找:QMultiMap 提供了快速查找指定键对应的值的方法。你可以使用 find() 方法来查找指定键对应的值,它会返回一个指向该值的迭代器。这样可以方便地进行值的查找和操作。
丰富的方法:QMultiMap 提供了丰富的方法来操作和管理键值对。除了插入、删除和查找方法之外,它还提供了许多其他方法,如清空整个容器、获取所有键的列表、获取指定键对应的所有值的列表等。
总之,QMultiMap 是一个灵活、方便和高效的容器类,适用于需要存储多个具有相同键的值,并按照键的顺序进行访问和遍历的场景。它提供了丰富的方法来操作和管理键值对,方便快捷地进行插入、删除、查找和遍历操作。
#include
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 创建一个 QMultiMap 对象
QMultiMap multiMap;
// 插入键值对
multiMap.insert("Apple", 5);
multiMap.insert("Banana", 3);
multiMap.insert("Apple", 2);
multiMap.insert("Orange", 4);
// 输出原始的 QMultiMap
qDebug() << "Original QMultiMap:";
for (auto it = multiMap.constBegin(); it != multiMap.constEnd(); ++it) {
qDebug() << it.key() << ":" << it.value();
}
// 修改键值对
QString key = "Apple";
int newValue = 10;
auto range = multiMap.equal_range(key);
for (auto it = range.first; it != range.second; ++it) {
if (it.value() == 5) {
it.value() = newValue;
}
}
// 输出修改后的 QMultiMap
qDebug() << "Modified QMultiMap:";
for (auto it = multiMap.constBegin(); it != multiMap.constEnd(); ++it) {
qDebug() << it.key() << ":" << it.value();
}
// 删除键值对
key = "Banana";
multiMap.remove(key);
// 输出删除后的 QMultiMap
qDebug() << "QMultiMap after removal:";
for (auto it = multiMap.constBegin(); it != multiMap.constEnd(); ++it) {
qDebug() << it.key() << ":" << it.value();
}
// 查找键值对
key = "Orange";
auto it = multiMap.find(key);
if (it != multiMap.end()) {
qDebug() << "Value for key" << key << ":" << it.value();
} else {
qDebug() << "Key" << key << "not found in QMultiMap";
}
return a.exec();
}
这个示例演示了如何使用 QMultiMap 进行增删改查操作。在这个示例中,我们创建了一个 QMultiMap 对象 multiMap,并使用 insert() 方法插入了几个键值对。然后,我们使用迭代器遍历 QMultiMap,并输出原始的 QMultiMap。
接下来,我们使用 equal_range() 方法找到键为 “Apple” 的所有键值对,并将值为 5 的修改为 10。然后,我们再次遍历 QMultiMap,并输出修改后的 QMultiMap。
然后,我们使用 remove() 方法删除键为 “Banana” 的键值对,并再次遍历 QMultiMap,并输出删除后的 QMultiMap。
最后,我们使用 find() 方法查找键为 “Orange” 的值,并输出查找结果。