QMap 与 QHash

Posted jiangsion

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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<() }指定总的顺序。

以上是关于QMap 与 QHash的主要内容,如果未能解决你的问题,请参考以下文章

QVector与QMap查找效率实战(QMap快N倍)

QMap 与 QHash

QMap与QHash

QMap类 QHash类

Qt6STL-QMap分析

QMap 的增删改查