QMap 与 QHash

  Qt提供的关联容器,QMap、QMultiMap,QHash、QMultiHash和QSet,带有“Multi”字样的容器支持在一个键上面关联多个值。

“Hash”容器提供了基于散列函数的更快的查找,而非 Hash 容器则是基于二分搜索的有序集合。

一、QMap、QMultiMap  

  QMap<Key, T>:提供了字典数据结构(关联数组),将类型 T 的值同类型 Key 的键关联起来。通常,每个键与一个值关联。QMap 以键的顺序存储数据;如果顺序无关,

QHash 提供了更好的性能。

  QMultiMap<Key, T>:这是 QMap 的子类,提供了多值映射:一个键可以与多个值关联。

二、QHash、QMultiHash

  QHash<Key, T>:该类同 QMap 的接口几乎相同,但是提供了更快的查找。QHash 以字母顺序存储数据。

  QMultiHash<Key, T>:这是 QHash 的子类,提供了多值散列。  

  所有的容器都可以嵌套。例如,QMap<QString, QList<int> > 是一个映射,其键是 QString 类型,值是 QList<int> 类型,也就是说,每个值都可以存储多个 int。

这里需要注意的是,C++ 编译器会将连续的两个 > 当做输入重定向运算符,因此,这里的两个 > 中间必须有一个空格。

三、区别

  ① QHash 提供比QMap 更快的查询。

  ② 当使用迭代器遍历一个QHash, 项目(items)是任意指定的;而对于QMap,项目(items)是通过键(key)来分类。

  ③ QHash 键(key)的类型必须支持 运算符== { operator==() }和 一个全局的qHash(Key)函数;而对于QMap必须使用运算符< { operator<() }指定总的顺序。

原文地址:https://www.cnblogs.com/jiangson/p/9147760.html

时间: 2024-10-04 23:30:53

QMap 与 QHash的相关文章

第三十七课、深度解析QMap与QHash

一.QMap深度解析 1.QMap是一个以升序键顺序存储键值对的数据结构 (1)QMap原型为class QMap<K, T>模板 (2).QMap中的键值对根据key进行了排序 (3).QMap中的key类型必须重载operator <     (小于操作符) 2.QMap使用实例一 3.QMap使用实例二 4.QMap的注意事项 (1).通过key获取Value时 A.当key存在,返回对应的Value B.当key不存在,返回值类型所对应的"零"值 (2).插入

第37课 深度解析QMap与QHash

1. QMap深度解析 (1)QMap是一个以升序键顺序存储键值对的数据结构 ①QMap原型为 class QMap<K, T>模板 ②QMap中的键值对根据Key进行了排序 ③QMap中的Key类型必须重载operator< .(即“小于”操作符) (2)QMap使用示例1 QMap<QString, int> map; //注意插入时是无序的 map.insert("key 2", 2); map.insert("key 0", 0

QMap与QHash

关联容器可以保存任意多个具有相同类型的项,且它们由一个键索引.Qt提供两个主要的关联容器类:QMap<K, T>和QHash<K, T>. QMap<K, T>是一个以升序键顺序存储键值对的数据结构.这种排列使它可以提供良好的查找插入性能及键序的迭代.在内部,QMap<K, T>是作为一个跳越列表(skip-list)来实现执行的. 在映射中插入项的一种简单方式是调用insert(): QMap<QString, int> map; map.in

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

基本概念: QMap提供了一个从类项为key的键到类项为T的直的映射,通常所存储的数据类型是一个键对应一个值,并且按照Key的次序存储数据.同时这个类也支持一键多值的情况,用类QMultiMap可以实现. QHash具有和QMap几乎完全一样的APi,此类维护这一张哈希表,表的大小和数据项是自适应的,QHash是以任意的顺序住址他的数据,当然了他也是可以支持一键多值的,用类QMultiHash可以实现. 两者之间的区别是: QHash查找速度上显著于QMap. QHash以任意的方式进行存储,而

Qt容器类(总结)

Introduction Qt库提供了一组基于模板的一般化的容器类.这些容器可以存储指定的类型的元素.例如,如果你需要一个可变大小的Qstring数组,可以用QVector<QString>.. 这些容器比STL容器更轻更安全更容易使用.如果你不熟悉STL或者更喜欢以Qt的方式做事,你可以用这些类取代STL类. 这些类是隐式共享的,它们都是可重入,它们进行了速度优化,用更少的内存和最小的内联代码扩展,生成更小的可执行文件.此外,当所有的线程仅仅以只读的方式访问它们时,它们是线程安全的. 为了遍

【大话QT之七】QT序列化操作

应用需求: 在网盘开发过程中有这样一个需求.即对文件版本号进行控制,即记录文件版本号的更替信息,这里说的更替信息不过记录不同一时候刻的文件变化,即文件的增.删.改.重命名等操作.在每一个待监控的文件夹下都会保存一份文件.记录文件变化的增量信息.每次低版本号到高版本号升级的时候就能够通过消元合并操作高速地进行.关于文件版本号控制的详细实现方案会在开发完好后列出.这里只指出它的保存方式,即将文件操作的实例对象序列化后保存在文件里. 序列化的实现: 这里我们採用QDataStream来实现序列化,QT

QList内存释放(看它内部存储的是否是Object,另外还有qDeleteAll)

QList<T> 的释放分两种情况: 1.T的类型为非指针,这时候直接调用clear()方法就可以释放了,看如下测试代码 #include <QtCore/QCoreApplication>#include <QList>#include <QString> int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); typedef struct _test { int id; QStr

QtCore Module&#39;s Classes

Qt Core C++ Classes Provides core non-GUI functionality. More... Reference These are links to the API reference materials. C++ Classes Animation Classes Threading Classes Container Classes Plugin Classes Implicitly Shared Classes State Machine Classe

(转)STL

C++容器类 C++中的容器类包括“顺序存储结构”和“关联存储结构”,前者包括vector,list,deque等:后者包括set,map,multiset,multimap等. 若需要存储的元素数在编译器间就可以确定,可以使用数组来存储,否则,就需要用到容器类了. 1.vector 连续存储结构,每个元素是在内存上是连续的: 支持高效的随机访问和在尾端插入/删除操作,但其他位置的插入/删除操作效率低下: 2.deque 连续存储结构,即其每个元素在内存上也是连续的,类似于vector,不同之处