【Qt 学习之路】比较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值为整型时):

Demo2(当key值为QString时):

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

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

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

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沙振宇

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值