Qt中QMap和QMultimap使用

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)返回值是常量,不允许替换

工程下载

源码下载

猜你喜欢

转载自blog.csdn.net/aoxuestudy/article/details/129656240