区分 Qt QHash 和QMap

移动开发
QMap是一个很有用的数据结构。它以“键-值”的形式保存数据。在使用的时候,通过提供字符标示(键)即可得到想要的数据。关于QHash,那么看本文的介绍吧。

本文介绍的是Qt QHash QMap的区别,关于容器类可以查阅更多的资料,首先我们先把QHash QMap区分开来。内容如下。

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

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

两种之间的区别是:

QHash查找速度上显著于QMap

QHash以任意的方式进行存储,而QMap则是以key顺序进行存储.

Qhash 的键类型必须提供operator==()和yige 全局的qHash(key)函数。而QMap的键类型key必须提供operator<()函数.

他们同样也是有两种风格的迭代容器。用来进行遍历的。

STL 风格的

QMap<key,T>  QMap<key,T>::const_iterator QMap<key,T>::iterator//同样中间那个也是只读的,最后那个是读写的。下面以一个例子来进行说明:

  1. #include <QDebug> 
  2. int main(int argc, char *argv[])  
  3. {  
  4.     QMap<QString, QString> map;  
  5.     map.insert("beijing", "111");  
  6.     map.insert("shanghai", "021");  
  7.     map.insert("tianjin", "022");  
  8.     map.insert("chongqing", "023");  
  9.     map.insert("jinan", "0531");  
  10.     map.insert("wuhan", "027");     
  11. QMap<QString, QString>::const_iterator i;  
  12.     for( i=map.constBegin(); i!=map.constEnd(); ++i)  
  13.         qDebug() << i.key() <<"        " << i.value();     
  14.        
  15.     QMap<QString, QString>::iterator mi;  
  16.     mi = map.find("beijing");  
  17.     if(mi != map.end())  
  18.         mi.value() = "010";  
  19.     QMap<QString, QString>::const_iterator modi;  
  20.     qDebug() << "";  
  21.     for( modi=map.constBegin(); modi!=map.constEnd(); ++modi)  
  22.         qDebug() << modi.key() <<"        " << modi.value();     
  23.     return 0;  

小结:关于QtQHash QMap的区别,相信你看完之后,应该很了然一新了。如果你需要对内存分配做优化,Qt的容器提供了三大内存分配函数,reserve(size),显示预分配size的内存; capacity(),返回已分配内存;squeeze()释放所有的未占用的内存;当你知道QHash的大小时,可以使用reserve函数预先分配内存。

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-06-22 13:27:04

QT QMap

2021-12-29 18:32:51

IaaSPaaS云计算

2011-06-30 17:51:17

QT 元类型 线程

2011-04-02 09:17:38

2011-03-03 15:32:51

Qt-Quick

2011-06-30 09:46:01

QT 显示视频 linux

2015-04-17 11:25:59

云存储云备份IaaS

2018-02-07 07:28:02

网线布线双绞线

2020-06-16 15:40:32

闭锁栅栏线程

2023-01-13 11:27:13

战略平台Forrester

2010-04-09 17:36:37

2022-02-18 00:15:58

Linux指令CPU

2009-10-29 22:05:39

博科资讯预算管理

2010-11-26 13:18:53

MySQL字符串

2011-07-20 11:11:48

网桥交换机

2017-03-18 16:28:40

人工智能机器学习深度学习

2011-06-23 13:38:27

QT 元对象 信号

2011-06-23 13:25:42

QT 源码 窗口

2011-06-09 11:11:35

QT 静态库 动态库

2020-11-09 14:07:53

PyQtQt编程
点赞
收藏

51CTO技术栈公众号