比较QMap、QHash(顺便讲了如何解决QMap和QList混合时遇到的坑)

这两个是Qt中比较常见的容器。下面来说说我的理解:
观点,技巧:
如果要求数据量小,在乎查找速度的时候用QHash,数据量大,内存限制严格时用QMap。

要掌握的基本要领:
QMap提供了一个从类项为key的键到类项为T的直的映射,通常所存储的数据类型是一个键对应一个直,并且按照Key的次序存储数据,这个类也支持一键多值的情况,用类QMultiMap
QHash具有和QMap几乎完全一样的APi,此类维护这一张哈希表,表的大小和数据项是自适应的,QHash是以任意的顺序住址他的数据,,当然了他也是可以支持一键多值的,QMultiHash
 
两种之间的区别是:
1、QHash查找速度上显著于QMap
2、QHash以任意的方式进行存储,而QMap则是以key顺序进行存储
3、Qhash 的键类型必须提供operator==()和一个全局的qHash(key)函数。而QMap的键类型key必须提供operator<()
 
实现角度:
QMap是使用“平衡二叉树”实现的,QHash是使用“哈希”算法实现的。

做了两个Demo来区分QMap和QHash:

Demo1(当key值为整型时):

比较QMap、QHash(顺便讲了如何解决QMap和QList混合时遇到的坑)_第1张图片比较QMap、QHash(顺便讲了如何解决QMap和QList混合时遇到的坑)_第2张图片

Demo2(当key值为QString时):

比较QMap、QHash(顺便讲了如何解决QMap和QList混合时遇到的坑)_第3张图片

由上面Demo可以看出,当key值是QString型时,QMap和QHash输出的是一样的。
当key值为int时,QMap按key的整型顺序排列,而QHash就是随机输出。  

使用QMap和QList混合时遇到的坑:
当自定义一个QList类型时,我直接写:


这样会报错,主要是因为Qt把>>当作一操作符了,以为map是一变量,所以编译出错。
这里讲两个方法爬坑:

比较QMap、QHash(顺便讲了如何解决QMap和QList混合时遇到的坑)_第4张图片

你可能感兴趣的:(//Qt,QML,//C,C++)