Qt文档阅读笔记-QSet官方解析及实例
发布日期:2021-06-30 10:58:51
浏览次数:2
分类:技术文章
本文共 2198 字,大约阅读时间需要 7 分钟。
目录
官方解析
QSet类是一个模板类,他是一个哈希表集合。
QSet<T>是Qt的一个普通容器类。QSet存储的值是不指明顺序的,QSet对这些值提供了快速检索的功能。他和QHash很像 PS:Set就是键值一样的Hash这里举一个QSet中存储QString的栗子:
QSetset;
使用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*>:
QSetIteratori(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:QSetset; ... 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月30日 22时04分04秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
性能分析—查询运行慢的原因(SQLServer2008宝典)
2019-04-30
sqlserver2008 死锁解决方法及性能优化方法
2019-04-30
sqlserver动态分区方案例子
2019-04-30
获取浏览器详细信息
2019-04-30
JS获取浏览器类型和版本信息
2019-04-30
canvas2image.js
2019-04-30
base64
2019-04-30
使用JavaScript将图片保存至本地
2019-04-30
Webbrowser指定IE内核版本(更改注册表)
2019-04-30
95.多栏显示
2019-04-30
96.分级汇总
2019-04-30
97.分组交叉表、复杂交叉表
2019-04-30
98.格式化报表
2019-04-30
99.固定行列报表
2019-04-30
100.行列转换
2019-04-30
101.交叉表分析
2019-04-30
102.交叉表-复杂名次
2019-04-30
102.交叉表-优先级处理
2019-04-30
103.列转行
2019-04-30
104.日期-星期-时间
2019-04-30