关于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不存在的时候,会自动在列表中创建此关键字的一个项,从而造成不必要的内存开销。


0 0