QMap

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

QMap常用函数如下:

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

QMap示例:

QMap<QString, int> map;          //定义键为QString型,值为int型

map["key 1"] = ;
map["key 1"] = ; //更新key 1的值
map["key 4"] = ;
map["key 2"] = ;
map.insert("key 3", ); //等价于: map["key 3"] = 3; QList<QString> list = map.keys(); for(int i=;i<list.length();i++)
{
qDebug()<< list[i]<<","<< map.value(list[i]) ;
}

打印:

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

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

QMapIterator常用函数如下:

void toFront ();       //使迭代器的游标指向容器的头部

void toBack ();       //使迭代器的游标指向容器的尾部

Item next ();        //返回map中的下一项,并使迭代器的游标指向下一项

Item previous ();    //返回map中的上一项,并使迭代器的游标指向上一项

bool hasNext ();     //若迭代器的游标指向的map还有下一项,则返回true,,若为空则返回false

bool hasPrevious ();  //若迭代器的游标指向的map还有上一项,则返回true,,若为空则返回false

const Key &  key ();  //返回上一项的键(key)和数值(value);

const T& value();    //返回上一项的数值(value);

示例:

       QMap<QString, int> map;

        map["key 1"] = ;
map["key 1"] = ; //key 1将会覆盖之前的key 1
map["key 4"] = ;
map["key 2"] = ;
map.insert("key 3", ); QMapIterator<QString, int> it(map); while(it.hasNext())
{
it.next();
qDebug()<<it.key()<<","<<it.value();
}

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

示例如下:

QMap<QString, int> map;

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

QHash

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

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

QHash<QString, int> hash;

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

运行打印:

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

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

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

        QHash<QString, int> hash;

        hash["key 1"] = ;
hash["key 1"] = ; //key 1将会覆盖之前的key 1
hash["key 4"] = ;
hash["key 2"] = ;
hash.insert("key 3", ); QHash<QString, int> ::const_iterator it; for(it=hash.begin();it!=hash.end();it++)
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. MySQL基础操作1

    1.进入MySQL的两种方式: (1).MySQL自带的控制台 直接输入密码 (2).命令提示符: mysql -uroot -proot 然后再输入密码 MySQL常用指令 ------- 1.启动 ...

  2. yield(),wait(),sleep(),join()

    yield(),wait(),sleep(),join()yield()虽然可以让线程由“运行状态”进入到“就绪状态”:但是,它不一定会让其它线程获取CPU执行权(即,其它线程进入到“运行状态”),即 ...

  3. Android插件化的兼容性(上):Android O的适配

    首先声明,<Android插件化开发指南>这本书所介绍的Android底层是基于Android6.0(API level 23)的,而本书介绍的各种插件化解决方案,以及配套的70多个例子, ...

  4. YxCMS 1.4.7 最新版漏洞分析

    i春秋作家:F0rmat 原文来自:YxCMS 1.4.7 最新版漏洞分析 0x01前言 很感谢关注我专辑的表哥,我会坚持写下去的,最近会慢一点,一月四篇是正常的. 在先知看到的,大部分都是后台漏洞, ...

  5. 迈向高阶:优秀Android程序员必知必会的网络基础

    1.前言 网络通信一直是Android项目里比较重要的一个模块,Android开源项目上出现过很多优秀的网络框架,从一开始只是一些对HttpClient和HttpUrlConnection简易封装使用 ...

  6. HTTP 协议常见的状态码

    HTTP状态码负责表示客户端HTTP请求的返回结果.标记服务器端的处理是否正常.通知出现的错误等工作. 状态码的类别: 记录在RFC2616上的HTTP状态码有40种,再加上WebDAV等的扩展,数量 ...

  7. 前端页面使用emoji

    概述 最近在工作中遇到了移动端emoji的显示问题,于是查找了一些相关资料,试验了一番,把心得记录下来,供以后开发时参考,相信对其他人也有用. 参考资料: 为网站添加emoji表情的支持 思路 在页面 ...

  8. Python开发爆破字典

    这里只是分享一下Python如何生成爆破字典 关于爆破工具编写我会在下一篇提到 其实有了爆破字典的话,直接使用Burp,Hydra等一些工具就可以做爆破了! Burp的使用在我以前的博客中有写过,至于 ...

  9. python数字图像处理---噪声的应用

    数字图像的随机噪声在图像处理中有着重要的位置,今天用到了,就回顾一下.做个总结. 随机噪声很多种,最常用的一般有两种,高斯噪声和椒盐噪声,下面我们就针对这两种噪声做个科普. 高斯噪声:高斯噪声是指它的 ...

  10. 【spring】从简单配置使用到深入

    一.使用前的配置 1.maven引入需要的jar包 <properties> <spring.version>4.1.6.RELEASE</spring.version& ...