• Qt QMultiMap


    头图

    QMultiMap


    关键字: QtQMultiMap容器键值键值重复

    摘要

    今天在观摩小伙伴撸代码的时候,突然听到了QMultiMap自己使用Qt开发这么就,竟然都不知道,所以趁没有被人发现自己是个水货,赶紧补充一下知识点。今天就学习一下QMultiMap

    QMultiMap

    QMultiMap 是 Qt 框架中的一个容器类,用于存储键值对的多重映射。它可以存储多个具有相同键的值,并且可以按照键的顺序进行访问和遍历。

    QMultiMap 提供了一系列的方法来操作和管理键值对。你可以使用 insert() 方法向 QMultiMap 中插入键值对,如果键已经存在,那么该值将会被添加到已有的键值对列表中。你还可以使用 remove() 方法来删除指定键值对,或者使用 clear() 方法来清空整个 QMultiMap。

    QMultiMap 还提供了一些方便的方法来访问和遍历键值对。你可以使用 values() 方法获取指定键对应的所有值的列表,或者使用 keys() 方法获取所有键的列表。此外,你还可以使用 find() 方法来查找指定键对应的值,或者使用 contains() 方法来检查 QMultiMap 是否包含指定的键。

    总之,QMultiMap 是一个非常实用的容器类,适用于需要存储多个具有相同键的值的场景。它提供了丰富的方法来操作和管理键值对,方便快捷地进行访问和遍历。

    QMultiMap 特点

    QMultiMap 的特点如下:

    1. 多重映射:QMultiMap 允许存储多个具有相同键的值。这意味着你可以将多个值与同一个键相关联,而不仅限于一个值。

    2. 键的顺序:QMultiMap 会按照键的顺序来存储键值对。这意味着你可以按照键的顺序进行访问和遍历,而不会丢失原始的键值对顺序。

    3. 动态大小:QMultiMap 的大小是动态的,可以根据需要进行扩展或收缩。你可以根据实际情况插入或删除键值对,而不需要提前指定容器的大小。

    4. 方便的插入和删除:QMultiMap 提供了方便的方法来插入和删除键值对。你可以使用 insert() 方法来插入键值对,如果键已经存在,那么该值将会被添加到已有的键值对列表中。你还可以使用 remove() 方法来删除指定键值对。

    5. 快速查找:QMultiMap 提供了快速查找指定键对应的值的方法。你可以使用 find() 方法来查找指定键对应的值,它会返回一个指向该值的迭代器。这样可以方便地进行值的查找和操作。

    6. 丰富的方法: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();
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    这个示例演示了如何使用 QMultiMap 进行增删改查操作。在这个示例中,我们创建了一个 QMultiMap 对象 multiMap,并使用 insert() 方法插入了几个键值对。然后,我们使用迭代器遍历 QMultiMap,并输出原始的 QMultiMap。

    接下来,我们使用 equal_range() 方法找到键为 “Apple” 的所有键值对,并将值为 5 的修改为 10。然后,我们再次遍历 QMultiMap,并输出修改后的 QMultiMap。

    然后,我们使用 remove() 方法删除键为 “Banana” 的键值对,并再次遍历 QMultiMap,并输出删除后的 QMultiMap。

    最后,我们使用 find() 方法查找键为 “Orange” 的值,并输出查找结果。


    博客签名2021
  • 相关阅读:
    矩阵分析与应用
    使用UiPath和AA构建的解决方案 6. 完成RPA挑战
    基于SpringBoot的教学资源库系统的设计与实现
    LeetCode0076.最小覆盖子串 Go语言AC笔记
    Spring MVC - 相关内容1
    Qt --- Day02
    反射_集合,,220817,,
    知识付费直播间即时通讯
    JAVA 反序列化之 Apache Commons Collections 反序列化漏洞分析
    Linux 文件操作(一) —— 遍历指定目录下的所有文件
  • 原文地址:https://blog.csdn.net/z609932088/article/details/133779723