原创

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://shazhenyu.blog.csdn.net/article/details/53286438
这两个是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值为整型时):


Demo2(当key值为QString时):


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

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


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


文章最后发布于: 2016-11-22 15:21:01
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 代码科技 设计师: Amelia_0503

分享到微信朋友圈

×

扫一扫,手机浏览