关于QHash与QMap
来源:互联网 发布:sql trigger 语法 编辑:程序博客网 时间:2024/05/16 14:55
关于QHash 和QMap的区别:
QMap<K, T>是一种键-值对的数据结构,它实际上使用跳表skip-list实现,按照K进行升序的方式进行存储。使用QMap<K, T>的insert()函数可以向QMap<K, T>中插入数据,QHash<K, T>是使用散列存储的键-值对。它的接口同QMap<K, T>几乎一样,但是它们两个的实现需求不同,所以QMap是一个以升序键顺序存储键值对的数据结构。这种排列使它可以提供良好的查找插入性能及键序的迭代。在内部,QMap是作为一个跳越列表(skip-list)来实现执行的。虽然写了这么多,但从算法与数据结构的角度来看,QMap应该是使用“平衡二叉树”实现的,QHash应该是使用“哈希”算法实现的。
使用时,两种之间的选取:
1. QHash查找速度上显著于QMap,在算法复杂性度量上,QMap的搜索是O(logn),而QHash平均是O(1)[最坏的情况是O(n)]。
2. QHash以任意的方式进行存储,而QMap则是以key顺序进行存储,当使用iterator对QMap和QHash进行遍历时,QMap总是按照关键字的顺序进行遍历的,而QHash则是以任意序列进行遍历。
3. Qhash 的键类型必须提供operator==()和一个全局的qHash(key)函数。而QMap的键类型key必须提供operator<()函数
QMap提供了一个从类项为key的键到类项为T的直的映射,通常所存储的数据类型是一个键对应一个直,并且按照Key的次序存储数据,这个类也支持一键多值的情况,用类QMultiMap。
QHash具有和QMap几乎完全一样的APi,此类维护这一张哈希表,表的大小和数据项是自适应的,QHash是以任意的顺序住址他的数据,,当然了他也是可以支持一键多值的,QMultiHash。
编程时需要特别注意的是:
在QHash和QMap中查找一个关键字的值,可以使用value()函数和[ ]操作符。但是一般来说应该使用value()函数来进行查找。因为[ ]操作符在查询的key不存在的时候,会自动在列表中创建此关键字的一个项,从而造成不必要的内存开销。
- 关于QHash与QMap
- QMap与QHash
- QMap与QHash类
- QMap与QHash类
- Qmap 与 Qhash 对比
- QMap QHash的选择
- QMap 和 QHash
- QMap 和 QHash 区别
- QMap和QHash
- 第37课 - 深度解析 QMap 与 QHash
- Qt QHash 和QMap 区别
- Qt QHash 和QMap 区别
- Qt容器类 QMap QHash
- QHash 和QMap的区别
- QMap类和QHash类
- Qt:QHash和QMap区别
- QMap (映射表) & QHash (哈希表)
- Qt容器(QMap/QHash etc)遍历
- java 加权随机数实现
- iOS Reveal及简单破解方法
- Java final 修饰符知识点总结
- 安装Linux
- Jetty介绍
- 关于QHash与QMap
- 奇偶冒泡排序的CUDA实现
- 米酒的作用
- CDH5 Solr性能调优
- 面向接口设计和编程——(面向对象、面向接口、面向过程、面向实现)
- 解码MFC消息映射机制
- 【学习ARToolkit小记之五】 解决“error LNK2019: 无法解析的外部符号 ___glutCreateWindowWithExit@8”错误
- 生活窍门
- postgis远程配置