Qt中QMap和QMultimap使用

该文章介绍了Qt中的QMap和QMultiMap容器类,它们用于存储键值对。QMap提供快速查找,而QMultiMap允许同一键对应多个值。文章通过实例展示了如何初始化、插入元素、遍历以及两者之间的区别。QMap中的元素按键排序,而QHash提供更快查找速度但遍历顺序不确定。
摘要由CSDN通过智能技术生成

Qt系列文章目录

前言

QMap 是Qt的通用容器类之一。它存储(键,值) 对,并提供与键相关联的值的快速查找。其实就是一个键值对的集合,经常使用的。具体更详细还得看看帮助文档

QMap/QMultiMap属于关联式容器,其底层结构是通过二叉树实现,故其查找value的效率很快。QMap中的数据都是成对出现的,第一个称为key(键),第二个称value(键值)。

QMultiMap 是Qt的通用容器类之一。它继承至于QMap并扩展了QMap的功能,使其比QMap更适合存储多值映射。
QMultiMap 是一种允许多个值使用同一个键的map;QMap通常不允许这样做,除非你调用QMap::insertMulti()。
因为QMultiMap继承了QMap,所以QMap的所有功能也适用于QMultiMap。

QMap和QHash提供了非常相似的功能。区别在于:

QHash提供了比QMap更快的平均查找速度。
在遍历QHash时,元素的顺序是任意的。在QMap中,元素总是按键排序了的。
QHash的键类型必须提供==() 运算符和一个全局的QHash (key) 函数。QMap的键类型必须提供<运算符来指定总顺序。由于Qt 5.8.1,使用指针类型作为键也是安全的,即使底层运算符<() 没有提供总的顺序。

一、实例

1.常用的函数:

size() :Map的大小
empty():是不是空
key():这个第一个元素的键
keys():返回所有的键
values():返回所有的值

  1. 插入元素
    QMap<QString, int> map;
    要在map中插入一个(键,值) 对,可以使用 运算符:
	QMap<QString, QString> map;
    map["one"] = "1";
    map["two"] = "2";
    map["three"] = "3";

    map.insert("four", "4");
    map.insert("five", "5");
    map.insert("six", "6");

这会将以下6个键值对插入到QMap中:(“one”, “1”) 、(“two”,“2” 和(“three”, “3”) 。
注意:map中的值是无序的

 foreach(const QString &key, map.keys())
        qDebug() << "key=" << key << ":" << "value=" << map.value(key);

在这里插入图片描述

map变量中并没有按1,2,3,4,5,6排序
3.遍历
如果想遍历存储在QMap中的所有键值对,可以使用迭代器。QMap提供了java风格的迭代器(QMapIterator和QMutableMapIterator) 和stl风格的迭代器(QMap::const_iterator和QMap::iterator) 。

QMapIterator<QString, QString> iter(map) ;
while (iter.hasNext() )  {
      iter.next() ;
      cout << iter.key()  << ": " << iter.value()  << Qt::endl;
}

4.你也可以使用foreach:map中提取键值

二、QMultiMap使用

1.初始化

	QMultiMap<QString, QString> multiMap;
    multiMap.insert("04", "0011_052322_151403_04_002_00001_00001_00.jpg");
    multiMap.insert("04", "0011_052322_151406_04_002_00001_00002_00.jpg");
    multiMap.insert("04", "0011_052322_151409_04_002_00001_00003_00.jpg");
    multiMap.insert("04", "0011_052322_151412_04_002_00001_00004_00.jpg");
    multiMap.insert("04", "1754_040821_111915_04_001_00001_00005_00.jpg");
    multiMap.insert("04", "1754_040821_111917_04_001_00001_00006_00.jpg");

2.遍历

foreach(const QString item, multiMap.uniqueKeys())
    {
        foreach(const QString value, multiMap.values(item))
        {
            qDebug() << "key=" << item << ":" << "value=" << value;
        }
    }

在这里插入图片描述

注意

1.map中的值是无序的,并不是先插入map的元素就一定排在前面
2…(at)返回值是常量,不允许替换

工程下载

源码下载

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值