QMap与QHash类

    QMap和QHash都是Qt里面的容器类,一般用来作为字典查询,索引使用,两者有着相似的用法和功能。

    两者的不同点在于:

    1. 在查找搜索的速度上, QHash比QMap要快;在算法复杂性度量上,QMap的搜索是O(logn),而QHash平均是O(1)[最坏的情况是O(n)]。为什么原因文档上没有说明,个人觉得在内部QHash是以整数作为key来查询的,而QMap则是以其他类型对象(比如QString等,当然也可以是整数)作为key,在比较算法上比整数要多花一些时间。

    2. 当使用iterator对QMap和QHash进行遍历时,QMap总是按照关键字的顺序进行遍历的,而QHash则是以任意序列进行遍历。索引如果需要得到排序的遍历结果时,应当使用QMap类。

    3. QMap的Key类型必须实现"<"比较运算符,用于Key的排序,而QHash则不同,它的Key类型需要实现“==”比较运算符,而且需要有一个全局的qHash函数将Key转换成整数类型的hash值。在C++和QT中可以用作qHash关键字的类型有:所有的整数类型(char,unsigned int,等),指针类型,QChar,QString,QByteArray。如果用其他类型作为Key则需要自行实现qHash函数和==比较操作符。


    另外,在QHash和QMap中查找一个关键字的值,可以使用value()函数和[ ]操作符。但是一般来说应该使用value()函数来进行查找。因为[ ]操作符在查询的key不存在的时候,会自动在列表中创建此关键字的一个项,从而造成不必要的内存开销。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值