千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > Qt中的qmultimap详解

Qt中的qmultimap详解

来源:千锋教育
发布人:xqq
时间: 2023-11-24 04:54:54 1700772894

一、qmultimap简介

qmultimap是Qt中的一个关联容器,它是一个键类型到值类型的映射,允许存储相同键的多个值。它是通过红黑树实现的,所以访问、删除、查找等操作均具有O(log n)的效率。

二、qmultimap的用途

qmultimap的用法与qmap类似,但它允许一个键关联多个值,适用于需要对键值进行分组的情况。例如,假设您需要将人名按照性别分组,可以使用qmultimap存储多个同性别的人名,键为性别,值为人名。

三、qmultimap的创建和插入元素

创建空的qmultimap对象很简单,只需要声明一个qmultimap类型的变量即可:


qmultimap myMap;

这个例子创建了一个qmultimap对象,它的键类型为QString,值类型为int。

插入元素可以使用insert()函数实现,需要传递一个QPair对象作为参数,其中第一个元素表示键,第二个元素表示值:


myMap.insert(qMakePair("apple", 2));
myMap.insert(qMakePair("orange", 3));
myMap.insert(qMakePair("apple", 5));
myMap.insert(qMakePair("banana", 1));

这个例子往qmultimap中插入了四个元素,其中有两个元素的键为"apple",即"apple"关联了两个值2和5。

四、qmultimap的访问元素

可以使用value()函数访问qmultimap中的元素,需要传递一个键作为参数,如果该键在qmultimap中关联了多个值,则value()函数返回最先插入的那个值:


int value = myMap.value("apple"); // 返回2

如果你需要访问"apple"关联的所有值,可以使用values()函数:


QList values = myMap.values("apple"); // 返回{2, 5}

还可以使用constIterator()、begin()和end()函数遍历qmultimap中的元素:


for(QMultiMap::const_iterator iter = myMap.constBegin(); iter != myMap.constEnd(); ++iter)
{
    QString key = iter.key();
    int value = iter.value();
    qDebug() << key << value;
}

这个例子遍历了整个qmultimap,输出每个元素的键和值。

五、qmultimap的删除元素

可以使用remove()函数删除qmultimap中的元素,需要传递一个键和值作为参数,如果这个键关联了多个值,则只删除最先插入的那个值:


myMap.remove("apple", 2);

这个例子删除了键为"apple",值为2的元素。

如果你需要删除该键关联的所有值,可以使用remove()函数,只需要传递一个键作为参数:


myMap.remove("apple");

这个例子删除了键为"apple",全部值的元素。

六、qmultimap的其他操作

qmultimap还提供了其他一些常用操作,例如count()函数可以返回一个键在qmultimap中关联的值的个数,isEmpty()函数可以判断qmultimap是否为空。

七、完整代码示例


#include 
#include 

int main()
{
    // 创建一个qmultimap对象
    QMultiMap myMap;

    // 插入元素
    myMap.insert(qMakePair("apple", 2));
    myMap.insert(qMakePair("orange", 3));
    myMap.insert(qMakePair("apple", 5));
    myMap.insert(qMakePair("banana", 1));

    // 访问元素
    int value = myMap.value("apple"); // 返回2
    qDebug() << value;

    QList values = myMap.values("apple"); // 返回{2, 5}
    qDebug() << values;

    for(QMultiMap::const_iterator iter = myMap.constBegin(); iter != myMap.constEnd(); ++iter)
    {
        QString key = iter.key();
        int value = iter.value();
        qDebug() << key << value;
    }

    // 删除元素
    myMap.remove("apple", 2);
    myMap.remove("apple");

    return 0;
}

tags: router.post
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT