QMap

  • QMap原型为class QMap <K,T>,其中K表示键,T表示值,K和T属于映射关系.
  • QMap会根据K来自动进行升序键排序
  • QMap中的K类型必须重载operator < 

QMap常用函数如下:

  1. const Key QMap::key ( const T & value );
  2. //通过值来找键,若未找到则返回0,由于只对K键进行排序,所以该函数不是快速查找
  3.  
  4. const T QMap::value ( const Key & key );
  5. //通过键来查找值, 若未找到则返回0,由于K键已进行排序,所以属于快速查找

QMap示例:

  1. QMap<QString, int> map; //定义键为QString型,值为int型
  2.  
  3. map["key 1"] = ;
  4. map["key 1"] = ; //更新key 1的值
  5. map["key 4"] = ;
  6. map["key 2"] = ;
  7. map.insert("key 3", ); //等价于: map["key 3"] = 3;
  8.  
  9. QList<QString> list = map.keys();
  10.  
  11. for(int i=;i<list.length();i++)
  12. {
  13. qDebug()<< list[i]<<","<< map.value(list[i]) ;
  14. }

打印:

  1. "key 1" ,
  2. "key 2" ,
  3. "key 3" ,
  4. "key 4" ,

也可以使用QMapIterator迭代器来遍历整个QMap

QMapIterator常用函数如下:

  1. void toFront ();     //使迭代器的游标指向容器的头部
  2.  
  3. void toBack ();     //使迭代器的游标指向容器的尾部
  4.  
  5. Item next ();       //返回map中的下一项,并使迭代器的游标指向下一项
  6.  
  7. Item previous ();    //返回map中的上一项,并使迭代器的游标指向上一项
  8.  
  9. bool hasNext ();     //若迭代器的游标指向的map还有下一项,则返回true,,若为空则返回false
  10.  
  11. bool hasPrevious ();  //若迭代器的游标指向的map还有上一项,则返回true,,若为空则返回false
  12.  
  13. const Key & key ();  //返回上一项的键(key)和数值(value);
  14.  
  15. const T& value();   //返回上一项的数值(value);

示例:

  1. QMap<QString, int> map;
  2.  
  3. map["key 1"] = ;
  4. map["key 1"] = ; //key 1将会覆盖之前的key 1
  5. map["key 4"] = ;
  6. map["key 2"] = ;
  7. map.insert("key 3", );
  8.  
  9. QMapIterator<QString, int> it(map);
  10.  
  11. while(it.hasNext())
  12. {
  13. it.next();
  14. qDebug()<<it.key()<<","<<it.value();
  15. }

在QMap类里也封装了一个  const_iterator 迭代类,也可以通过它来遍历整个QMap

示例如下:

  1. QMap<QString, int> map;
  2.  
  3. map["key 1"] = ;
  4. map["key 1"] = ; //key 1将会覆盖之前的key 1
  5. map["key 4"] = ;
  6. map["key 2"] = ;
  7. map.insert("key 3", );
  8.  
  9. QMap<QString, int>::const_iterator it;
  10.  
  11. for(it = map.begin();it!=map.end();it++)
  12. {
  13. qDebug()<< it.key()<<","<<it.value();
  14. }

QHash

  • QHash原型为class QHash<K,T>,其中K表示键,T表示值,K和T属于映射关系.
  • 和QMap不同的是,QHash中的键值对不会进行自动排序,而是更据Hash值存储
  • QHash中的Key类型必须重载operator ==
  • QHash中的Key对象必须重载全局哈希函数qHash()
  • 由于QHash通过Hash表存储,所以查找比QMap快

QHash常用函数和QMap类似,示例如下:

  1. QHash<QString, int> hash;
  2.  
  3. hash["key 1"] = ;
  4. hash["key 1"] = ; //key 1将会覆盖之前的key 1
  5. hash["key 4"] = ;
  6. hash["key 2"] = ;
  7. hash.insert("key 3", );
  8.  
  9. QList<QString> list = hash.keys();
  10.  
  11. for(int i=;i<list.length();i++)
  12. qDebug()<<list[i]<<","<<hash.value(list[i]);

运行打印:

  1. "key 1" ,
  2. "key 2" ,
  3. "key 3" ,
  4. "key 4" ,

QHash的迭代器QHashIterator类用法,和QMap的使用方法一样.

QHash内部也封装了一个  const_iterator 迭代类,和QMap的使用方法也一样,比如:

  1. QHash<QString, int> hash;
  2.  
  3. hash["key 1"] = ;
  4. hash["key 1"] = ; //key 1将会覆盖之前的key 1
  5. hash["key 4"] = ;
  6. hash["key 2"] = ;
  7. hash.insert("key 3", );
  8.  
  9. QHash<QString, int> ::const_iterator it;
  10.  
  11. for(it=hash.begin();it!=hash.end();it++)
  12. qDebug()<<it.key()<<","<<it.value();

QMap和QHash区别

16.QT-QMap和QHash解析的更多相关文章

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

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

  2. 第37课 深度解析QMap与QHash

    1. QMap深度解析 (1)QMap是一个以升序键顺序存储键值对的数据结构 ①QMap原型为 class QMap<K, T>模板 ②QMap中的键值对根据Key进行了排序 ③QMap中 ...

  3. QMap与QHash

    关联容器可以保存任意多个具有相同类型的项,且它们由一个键索引.Qt提供两个主要的关联容器类:QMap<K, T>和QHash<K, T>. QMap<K, T>是一 ...

  4. Qt的.pro文件格式解析

    Qt的.pro文件格式解析 在Qt中用qmake生成makefile文件,它是由.pro文件生成而来的,.pro文件的具体格式语法如下: 1.注释 .pro文件中注释采用#号,从"#&quo ...

  5. QT中出现“无法解析的外部符号”错误

    串口中我要把奇偶校验等enum数据对应写到一个ComboBox中去,所以需要在我的Settings类中加入一个函数用来转换. 这里,我首先在settings.h的class Settings中加上对该 ...

  6. Qt中三种解析xml的方式

    在下面的随笔中,我会根据xml的结构,给出Qt中解析这个xml的三种方式的代码.虽然,这个代码时通过调用Qt的函数实现的,但是,很多开源的C++解析xml的库,甚至很多其他语言解析xml的库,都和下面 ...

  7. QT使用QJson生成解析Json数据的方法

    QT中使用json还是比较方便的,下面用例子直接说明 举例子之前首先推荐一个在线解析json格式的网站,具体格式用法如下图所示: 之后根据这个格式进行json数据解析. QT使用json需要包含的头文 ...

  8. Qt中使用DOM解析XML文件或者字符串二(实例)

    介绍 在Qt中提供了QtXml模块实现了对XML数据的处理,我们在Qt帮助中输入关键字QtXml Module,可以看到该模块的类表.在这里我们可以看到所有相关的类,它们主要是服务于两种操作XML文档 ...

  9. QT error LNK2019: 无法解析的外部符号

    一个见到那的错误,困扰了好几天了,今天才解决,记录下. 使用QT Creator建立项目,添加一个QT设计界面widget,命名为TestWidget.有ui,头文件(.h),源码文件(.cpp).在 ...

随机推荐

  1. redis启动出现错误creating server tcp listening socket 127.0.0.1:6379: bind No error

    creating server tcp listening socket 127.0.0.1:6379: bind No error 的解决方案如下按顺序输入如下命令就可以连接成功 1. redis- ...

  2. chat.php

    <!DOCTYPE html><html> <meta charset="UTF-8"> <title>web chat</t ...

  3. [转] An Introduction to Mutual SSL Authentication

    1. Introduction Mutual SSL authentication or certificate based mutual authentication refers to two p ...

  4. Project Structure详解

    Project Structure “ 项目结构”对话框允许您管理项目和IDE级别的元素,例如Modules,Facets,Libraries, Artifacts和SDK. 在大多数情况下,左边部分 ...

  5. 看CES 2017上有哪些好玩的物联网设备

    2017年国际消费类电子产品展览会(CES)已于昨天在拉斯维加斯正式开幕,多款新一代智能手机和平板电脑亮相本届CES大展,智能家居.穿戴等设备更成为外界普遍关注的焦点.今天笔者将带大家一览CES 20 ...

  6. 站在JAVA数据结构的视角看待简单表结构

    1.前言: 我们提到程序中的集合的时候,往往脑海中会浮现出, 如ArrayList和LinkedList以及和HashMap.当然在提到ArrayList和LinkedList的时候,我们大多数的人都 ...

  7. 吴恩达机器学习笔记2-代价函数I(cost function)

    我们选择的参数决定了我们得到的直线相对于我们的训练集的准确程度,模型所预测的值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差(modeling error). 我们的目标便是选择出可以使得建 ...

  8. 简单读!Mybatis源码(一)一条select的一生

    工具除了会用,还应该多做点.我觉得使用一个软件工具(开源类),一般会经历几个步骤: 1. 通过wiki了解大致作用,然后开始码代码: 2. 系统性地学习其特性,找出可能需要的点,用上去: 3. 通过阅 ...

  9. 原生JS-旋转木马

    原生JS-旋转木马 今天写一个原生JS写的旋转木马JS效果. 实现原理: 1.建立一个数组给每一张图片写对应的z-index,opacity,top,width: 2.实现旋转的操作是把建造的数组里面 ...

  10. LVS DR模式配置

    关于LVS的相关介绍,以下两篇文章均做了具体的介绍: http://www.linuxvirtualserver.org/zh/lvs1.html http://www.cnblogs.com/liw ...