Qt文档阅读笔记-QSet官方解析及实例
发布日期:2021-06-30 10:58:51 浏览次数:2 分类:技术文章

本文共 2198 字,大约阅读时间需要 7 分钟。

目录

 


官方解析

QSet类是一个模板类,他是一个哈希表集合。

QSet<T>是Qt的一个普通容器类。QSet存储的值是不指明顺序的,QSet对这些值提供了快速检索的功能。他和QHash很像
PS:Set就是键值一样的Hash

这里举一个QSet中存储QString的栗子:

QSet
set;

使用insert()函数往set里面添加值:

set.insert("one");  set.insert("three");  set.insert("seven");

或者通过<<这个重载运算符放set插入数据:

set << "twelve" << "fifteen" << "nineteen";

使用contains()判断set中是否存在某一项:

if (!set.contains("ninety-nine"))      ...

如果想遍历整个set,可以使用iterator。QSet提供了2种方式去遍历,一种是java风格的iterators(使用QSetIterator和QMutableSetIterator)或者使用STL风格的iterators(QSet::iterator和QSet::const_iterator)。下面举了一个使用java风格的iterator去变量QSet<QWidget*>:

 

QSetIterator
i(set); while (i.hasNext()) qDebug() << i.next();

对于同样的代码,可以使用STL风格的iterator;

QSet
::const_iterator i = set.constBegin(); while (i != set.constEnd()) { qDebug() << *i; ++i; }

QSet是无序的,所以iterator的指向也是未知的,如果需要有序的键值,那么得使用QMap。

遍历QSet,还可以使用foreach:

QSet
set; ... foreach (const QString &value, set) qDebug() << value;

使用remove()函数可以删除某个item。使用clear()移除所有的item。

QSet的数据必须是一个可转化的数据类型(assignable data type),举个例子,不能存QWidget而要存QWidget*。除此之外,这些类型要提供 == 的重载,并且还得有一个全局的qHash()函数,这个全局的qHash()函数为键值的类型返回一个hash值。通过QHash的文档将会列出上面所说到的东西。
QSet使用hash表进行检索。因为hash表增加和收缩,不浪费内存的特性,使得QSet能快速检索,如果你大概知道这个hash表的大小,可以使用reserve()函数可以通知QSet中hash表的大小,但是这不是获取良好性能的必要条件,通过调用capacity()去查看hash表的大小。

 

博主栗子

举一个插入和遍历,看大小的例子把

源码如下:

#include 
#include
#include
class Data{public: Data(const QString &strVal, const int &intVal){ StrVal = strVal; IntVal = intVal; } QString StrVal; int IntVal; friend QDebug operator << (QDebug os, Data data){ os << "(" << data.StrVal << " ," << data.IntVal << ")"; return os; }};int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); QSet
dataSet; dataSet.insert(new Data("ABC", 0)); dataSet.insert(new Data("DEF", 1)); dataSet << new Data("AAA", 2); dataSet << new Data("CCC", 3); //Java style QSetIterator
i(dataSet); while(i.hasNext()) qDebug() << *(i.next()); //STL style QSet
::const_iterator stlI = dataSet.constBegin(); while(stlI != dataSet.constEnd()){ qDebug() << **stlI; delete *stlI; stlI++; } return a.exec();}

运行截图如下:

当在此处下断点时,运行截图如下:

 

当在此处下断点时,运行截图如下:

转载地址:https://it1995.blog.csdn.net/article/details/86242033 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Qt文档阅读笔记-Button QML Type官方解析及实例
下一篇:Qt工作笔记-使用QRegExp实现QString的split【读取文件时候,过滤各种字符】

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月30日 22时04分04秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章