Qt ------- QMap和QHash的区别

摘要:
QHash的APi与QMap几乎相同。此类维护此哈希表。表大小和数据项是自适应的。QHash以任何顺序处理其数据。当然,它也可以支持一个键和多个值。它可以用QMultiHash类实现。两者之间的区别在于QHash明显快于QMap。QMap的键类型键必须提供运算符˂()函数。当迭代器用于遍历QMap和QHash时,QMap总是按关键字的顺序遍历。QHash遍历任何序列。因此,如果索引想要获得排序的遍历结果,那么应该使用QMap类。

基本概念:

QMap提供了一个从类项为key的键到类项为T的直的映射,通常所存储的数据类型是一个键对应一个值,并且按照Key的次序存储数据。同时这个类也支持一键多值的情况,用类QMultiMap可以实现。

QHash具有和QMap几乎完全一样的APi,此类维护这一张哈希表,表的大小和数据项是自适应的,QHash是以任意的顺序住址他的数据,当然了他也是可以支持一键多值的,用类QMultiHash可以实现。

两者之间的区别是:

  • QHash查找速度上显著于QMap。
  • QHash以任意的方式进行存储,而QMap则是以key顺序进行存储。
  • Qhash 的键类型必须提供operator==()和一个 全局的qHash(key)函数。
  • QMap的键类型key必须提供operator<()函数。
  • 当使用iterator对QMap和QHash进行遍历时,QMap总是按照关键字的顺序进行遍历的。
  • QHash则是以任意序列进行遍历。

所以如果索引要得到排序的遍历结果时,应当使用QMap类。

免责声明:文章转载自《Qt ------- QMap和QHash的区别》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android设置背景python3 练习题100例 (二十七)列表元素改写下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C++11的for循环,以及范围Range类的实现

C++11支持range-based for循环。这是一个很方便的特性,能省挺多代码。以下代码就能很方便的遍历vector中的元素,并打印出来: 1 2 3 4 5 6 7 8 std::vector<int> int_vec; int_vec.push_back(1); int_vec.push_back(2); //如果要修改i...

iOS 开发之照片框架详解(1)

http://kayosite.com/ios-development-and-detail-of-photo-framework.html/comment-page-1 一. 概要 在 iOS 设备中,照片和视频是相当重要的一部分。最近刚好在制作一个自定义的 iOS 图片选择器,顺便整理一下 iOS 中对照片框架的使用方法。在 iOS 8 出现之前,开发...

遍历QMap引发异常处理

  引言 用常规方法遍历QMap,删除满足条件元素时出现“读取位置0xXXX时发生访问冲突”。查看“调用堆栈”指向QMap<int,int>::iterator::operator++()和QMapNode<int,int>::nextNode() 定位为删除iterator中元素引起iterator的遍历异常,特记录如下: 常规错...

JQUERY基础2 效果 遍历 内置遍历函数

效果 隐藏与显示       hide() 和 show() <body> <button>点击</button> <div class="fi"> 今天周六 </div> </body> </html> <script> var bs =...

Java通过遍历sessionId获取服务器所有会话session

  Servlet2.1之后不支持SessionContext里面getSession(String id)方法,也不存在遍历所有会话Session的方法。但是,我们可以通过HttpSessionListener监听器和全局静态map自己实现一个SessionContext,然后用SessionContext管理一份服务器所有会话的Session。 1.w...

Redis源码解析03: 字典的遍历

  遍历一个稳定的字典,当然不是什么难事,但Redis中的字典因为有rehash的过程,使字典可能扩展,也可能缩小。这就带来了问题,如果在两次遍历中间,字典的结构发生了变化(扩展或缩小),字典中的元素所在的位置相应的会发生变化,那如何保证字典中原有的元素都可以被遍历?又如何能尽可能少的重复迭代呢?   Redis使用的遍历算法非常精妙,使用该算法,可以做到...