16.QT-QMap和QHash解析
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解析的更多相关文章
- Qt ------- QMap和QHash的区别
基本概念: QMap提供了一个从类项为key的键到类项为T的直的映射,通常所存储的数据类型是一个键对应一个值,并且按照Key的次序存储数据.同时这个类也支持一键多值的情况,用类QMultiMap可以实 ...
- 第37课 深度解析QMap与QHash
1. QMap深度解析 (1)QMap是一个以升序键顺序存储键值对的数据结构 ①QMap原型为 class QMap<K, T>模板 ②QMap中的键值对根据Key进行了排序 ③QMap中 ...
- QMap与QHash
关联容器可以保存任意多个具有相同类型的项,且它们由一个键索引.Qt提供两个主要的关联容器类:QMap<K, T>和QHash<K, T>. QMap<K, T>是一 ...
- Qt的.pro文件格式解析
Qt的.pro文件格式解析 在Qt中用qmake生成makefile文件,它是由.pro文件生成而来的,.pro文件的具体格式语法如下: 1.注释 .pro文件中注释采用#号,从"#&quo ...
- QT中出现“无法解析的外部符号”错误
串口中我要把奇偶校验等enum数据对应写到一个ComboBox中去,所以需要在我的Settings类中加入一个函数用来转换. 这里,我首先在settings.h的class Settings中加上对该 ...
- Qt中三种解析xml的方式
在下面的随笔中,我会根据xml的结构,给出Qt中解析这个xml的三种方式的代码.虽然,这个代码时通过调用Qt的函数实现的,但是,很多开源的C++解析xml的库,甚至很多其他语言解析xml的库,都和下面 ...
- QT使用QJson生成解析Json数据的方法
QT中使用json还是比较方便的,下面用例子直接说明 举例子之前首先推荐一个在线解析json格式的网站,具体格式用法如下图所示: 之后根据这个格式进行json数据解析. QT使用json需要包含的头文 ...
- Qt中使用DOM解析XML文件或者字符串二(实例)
介绍 在Qt中提供了QtXml模块实现了对XML数据的处理,我们在Qt帮助中输入关键字QtXml Module,可以看到该模块的类表.在这里我们可以看到所有相关的类,它们主要是服务于两种操作XML文档 ...
- QT error LNK2019: 无法解析的外部符号
一个见到那的错误,困扰了好几天了,今天才解决,记录下. 使用QT Creator建立项目,添加一个QT设计界面widget,命名为TestWidget.有ui,头文件(.h),源码文件(.cpp).在 ...
随机推荐
- Openvswitch手册(2): OpenFlow Controller
我们这一节主要来看Controller Controller有两种: Primary Controller: 真正控制vswitch的flow table,vswitch会保持和contro ...
- 谈谈一些有趣的CSS题目(十六)-- 奇妙的 background-clip: text
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...
- CLion之C++框架篇-优化开源框架,引入curl,实现get方式获取资源(四)
背景 结合上一篇CLion之C++框架篇-优化框架,引入boost(三),继续进行框架优化!在项目中,我们经常会通过get方式拉取第三方资源,这一版优化引入类库curl,用来拉取第三方资源库. ...
- 【java】java反射初探 ——“当类也学会照镜子”
反射的作用 开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类 我理解的“反射”的意义 (仅个人理解哈) 我理解的java反射机制就是: 提供一套完善而强 ...
- Win10下python不同版本同时安装并解决pip共存问题
特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似. 使用python开发,环境有Python2和 python3 两种,有时候需要两种环境切换使用,下 ...
- Cannot load php5apache2_4.dll into server
配置PHP开发环境的时候,当进行到在Apache的httpd.conf文件中配置加载PHP模块时发生如下错误 httpd: Syntax error on line 185 of D:/wamp/Ap ...
- 微信小程序实现显示和隐藏控件-头像-取值-bindblur事件
微信小程序实现显示和隐藏控件 .wxml: <view class=" {{showOrHidden?'show':'hidden'}}"></view> ...
- Node.js项目拆包工程化
背景 在我们开发的过程中,经常会遇到这样的问题,开发完了一些代码或者一个接口,别的小伙伴过来问你,代码可不可以给他复用,接口可以给他调用.这说明代码的复用和抽象对团队协作是很重要的.举个例子,如下图 ...
- 【jdbc】连接数据库从浅入深
一.回想 还记得以前自学的时候,刚接触到数据库,讲解的连接数据库的最基本的理论知识和方法,现在温习一下基础知识并总结如下! 1.JDBC连接数据库的基本流程 加载JDBC驱动程序 —> 提供JD ...
- elasticsearch 操作
文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 客户端:https://www.elasti ...