日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt文档阅读笔记-QSet官方解析及实例

發(fā)布時(shí)間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt文档阅读笔记-QSet官方解析及实例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

?

官方解析

博主栗子


官方解析

QSet類是一個(gè)模板類,他是一個(gè)哈希表集合。
QSet<T>是Qt的一個(gè)普通容器類。QSet存儲的值是不指明順序的,QSet對這些值提供了快速檢索的功能。他和QHash很像
PS:Set就是鍵值一樣的Hash

這里舉一個(gè)QSet中存儲QString的栗子:

QSet<QString> set;

使用insert()函數(shù)往set里面添加值:

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

或者通過<<這個(gè)重載運(yùn)算符放set插入數(shù)據(jù):

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

使用contains()判斷set中是否存在某一項(xiàng):

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

如果想遍歷整個(gè)set,可以使用iterator。QSet提供了2種方式去遍歷,一種是java風(fēng)格的iterators(使用QSetIterator和QMutableSetIterator)或者使用STL風(fēng)格的iterators(QSet::iterator和QSet::const_iterator)。下面舉了一個(gè)使用java風(fēng)格的iterator去變量QSet<QWidget*>:
?

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

對于同樣的代碼,可以使用STL風(fēng)格的iterator;

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

QSet是無序的,所以iterator的指向也是未知的,如果需要有序的鍵值,那么得使用QMap。
遍歷QSet,還可以使用foreach:

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

使用remove()函數(shù)可以刪除某個(gè)item。使用clear()移除所有的item。
QSet的數(shù)據(jù)必須是一個(gè)可轉(zhuǎn)化的數(shù)據(jù)類型(assignable data type),舉個(gè)例子,不能存QWidget而要存QWidget*。除此之外,這些類型要提供 == 的重載,并且還得有一個(gè)全局的qHash()函數(shù),這個(gè)全局的qHash()函數(shù)為鍵值的類型返回一個(gè)hash值。通過QHash的文檔將會列出上面所說到的東西。
QSet使用hash表進(jìn)行檢索。因?yàn)閔ash表增加和收縮,不浪費(fèi)內(nèi)存的特性,使得QSet能快速檢索,如果你大概知道這個(gè)hash表的大小,可以使用reserve()函數(shù)可以通知QSet中hash表的大小,但是這不是獲取良好性能的必要條件,通過調(diào)用capacity()去查看hash表的大小。

?

博主栗子

舉一個(gè)插入和遍歷,看大小的例子把

源碼如下:

#include <QtCore/QCoreApplication> #include <QSet> #include <QDebug>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<Data*> dataSet;dataSet.insert(new Data("ABC", 0));dataSet.insert(new Data("DEF", 1));dataSet << new Data("AAA", 2);dataSet << new Data("CCC", 3);//Java styleQSetIterator<Data *> i(dataSet);while(i.hasNext())qDebug() << *(i.next());//STL styleQSet<Data*>::const_iterator stlI = dataSet.constBegin();while(stlI != dataSet.constEnd()){qDebug() << **stlI;delete *stlI;stlI++;}return a.exec(); }

運(yùn)行截圖如下:

當(dāng)在此處下斷點(diǎn)時(shí),運(yùn)行截圖如下:

?

當(dāng)在此處下斷點(diǎn)時(shí),運(yùn)行截圖如下:

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的Qt文档阅读笔记-QSet官方解析及实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。