QHash和QMultiHash使用
本文标题:QHash和QMultiHash使用 本文地址:http://techieliang.com/2017/12/557/
1. 介绍
QHash<Key, T>是一个在哈希表中存储键值对的数据结构。它的接口几乎与QMap<Key,
T>相同,但是与QMap<Key, T>相比,它对ey的模板类型有不同的要求,而且它提供了比QMap<Key,
T>更快的查找功能。
The key type of a QMap must provide operator<(). The
key type of a QHash must provide operator==() and a global hash function
called qHash() (see qHash).
QMap需要提供operator<()。QHash<K,
T>中K的值类型还需要提供一个operator==(),并需要一个能够为键返回哈希值的全局qHash()函数的支持。Qt已经为qHash()函数提供了对整型、指针型、QChar、QString以及QByteArray。
QMultiHash类似于QMultiMap相对于QMap的,实现了但key对应多值。
相关帮助文档:QHash、QMultiHash
2. 简单范例
2.1. QHash
- #include <QHash>
- #include <QDebug>
- QHash<QString,int> m_map;
- m_map["a"] = 10;
- m_map["a"] = 11;
- m_map["as"] = 13;
- m_map.insert("b",22);//同key不同value
- m_map.insert("b",23);
- m_map.insert("ba",55);
- m_map.insert("ba",56);
- m_map.insert("t1",77);//同value不同key
- m_map.insert("t2",77);
- auto find_index = m_map.find("as");
- if(find_index!=m_map.end()) {
- qDebug()<<find_index.key()<<find_index.value();
- }
- qDebug()<<m_map.value("a");
- qDebug()<<m_map.value("b");
- qDebug()<<m_map.value("aa");
- qDebug()<<m_map.values("b");//测试同key不同value
- qDebug()<<m_map.key(22);
- qDebug()<<m_map.key(77);
- qDebug()<<m_map.keys(77);//测试同value不同key
结果
- "as" 13
- 11
- 23
- 0
- (23)
- ""
- "t2"
- ("t2", "t1")
2.2. QMultiHash
- QMultiHash<QString,int> m_map;
- //m_map["a"] = 10;
- //m_map["a"] = 11;
- //m_map["as"] = 13;
- m_map.insert("b",22);//同key不同value
- m_map.insert("b",23);
- m_map.insert("ba",55);
- m_map.insert("ba",56);
- m_map.insert("t1",77);//同value不同key
- m_map.insert("t2",77);
- auto find_index = m_map.find("as");
- if(find_index!=m_map.end()) {
- qDebug()<<find_index.key()<<find_index.value();
- }
- qDebug()<<m_map.value("a");
- qDebug()<<m_map.value("b");
- qDebug()<<m_map.value("aa");
- qDebug()<<m_map.values("b");//测试同key不同value
- qDebug()<<m_map.key(22);
- qDebug()<<m_map.key(77);
- qDebug()<<m_map.keys(77);//测试同value不同key
- //修改必须用replace
- m_map.replace("b",25);//讲第一个key=b的修改为了25
- m_map.replace("t3",77);//由于没有t3=77所以新增加了一个
- qDebug()<<m_map.values("b");
- qDebug()<<m_map.keys(77);
结果
- 0
- 23
- 0
- (23, 22)
- "b"
- "t1"
- ("t1", "t2")
- (25, 22)
- ("t1", "t2", "t3")
3. 自定义类型实现hash
见QSet使用-自定义类型,QSet也是利用哈希表实现,原理相同。
QHash和QMultiHash使用的更多相关文章
- C++中的容器类详解
一.STL容器类 STL(Standard Template Library)的六大组件:容器(containers).迭代器(iterators).空间配置器(allocator).配接器(adap ...
- Qt 学习之路:存储容器
存储容器(containers)有时候也被称为集合(collections),是能够在内存中存储其它特定类型的对象,通常是一些常用的数据结构,一般是通用模板类的形式.C++ 提供了一套完整的解决方案, ...
- Qt 中一些常用类中文说明
Qt 中一些常用类中文说明是本文讲述的内容,这篇文章主要是介绍Qt 当中经常使用的类,采取的是使用字母索引的方式,下面的类是被经常使用的. QDataStream 为QIODevice提供了一串的二进 ...
- Qt——容器类(译)
注:本文是我对Qt官方文档的翻译,错误之处还请指正. 原文链接:Container Classes 介绍 Qt库提供了一套通用的基于模板的容器类,可以用这些类存储指定类型的项.比如,你需要一个大小可变 ...
- Qt 学习之路 2(38):存储容器
Qt 学习之路 2(38):存储容器 豆子 2013年1月14日 Qt 学习之路 2 38条评论 存储容器(containers)有时候也被称为集合(collections),是能够在内存中存储其它特 ...
- Qt容器类之一:Qt的容器类介绍
一.介绍 Qt库提供了一套通用的基于模板的容器类,可以用这些类存储指定类型的项.比如,你需要一个大小可变的QString的数组,则使用QVector<QString>. 这些容器类比STL ...
- QT5:先导篇 数据类型
一.简介 二.字符串类(QString) 三.日期类(QData) 四.时间类(QTime) 五.顺序容器类 Qt的顺序容器类有QList QLinkedList QVector QStack QQ ...
- Qt中的常用容器类(解释比较全面,有插图)
在Qt库中为我们提供了一系列的基于模板的容器类.这些类可以被用来存储特定类型的项.例如,如果你需要一个大小可以变得QString数组,那么可以使用QVector<QString>. 这些容 ...
- Qt类库介绍
QT类库 QT核心特点 QT是一个跨平台开发的类库. QT的元对象编译器MOC是一个预处理器,在源程序被编译前先将这些QT特性的程序转为标准的C++兼容的形式,然后再有标准的C++编译器进行编译.也就 ...
随机推荐
- ACM1013:Digital Roots
Problem Description The digital root of a positive integer is found by summing the digits of the int ...
- C语言 经典编程100
一.题目 [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去掉不满足条件 ...
- ubuntu 和windows 分别在anaconda上安装tensorflow
windows下 的anaconda安装tensorflow: 在Anaconda Prompt中:conda install tensorflow python=3.5一直下载失败.总结一下原因可能 ...
- SparkStreaming任务保持运行,定时任务监控进程,保证不挂掉
cron任务:每隔1分钟启动脚本,检查进程是否运行.crontab -e */1 * * * * bash /data/spark/test.sh 检查进程,如果进程挂掉,重新启动Spark任务:给s ...
- 微信小程序真机预览跟本地不同的问题。原文地址:https://blog.csdn.net/qq_27187991/article/details/69664247/
微信小程序中出现最多的一个问题,就是真机跟本地不同:我简单列举一些我发现的原因,给大家参考,大家也可以把自己发现的东西回复给我,给我参考: 本地看不到数据,就先让本地能看到数据,再看本帖....特别提 ...
- 【LG3237】[HNOI2014]米特运输
题面 洛谷 题解 代码 #include <iostream> #include <cstdio> #include <cstdlib> #include < ...
- 【替罪羊树】bzoj3224&luogu3369&cogs1829 [Tyvj 1728]普通平衡树
[替罪羊树]bzoj3224&luogu3369&cogs1829 [Tyvj 1728]普通平衡树 bzoj 洛谷 cogs 先长点芝士 替罪羊树也是一种很好写的平衡树qwq..替罪 ...
- web存储机制(localStorage和sessionStorage)
web存储包括两种:sessionStorage 和 localStorage(都是限定在文档源级别,非同源文档间无法共享) 1.sessionStorage 数据放在服务器上(IE不支持) 严格用于 ...
- python全栈开发-面向对象-进阶
python_day_18 1,面向对象的三大特性是什么?继承,多态,封装2,什么是面向对象的新式类?什么是经典类?凡是继承object类都是新式类.凡是不继承object类都是经典类.3,面向对象为 ...
- Python和Pycharm的安装
目录 安装Python 安装Pycharm IDE 破解Pycharm 用Pycharm创建Python工程 安装Python 去Python官网下载Python软件,网址:https://www.p ...