Qt文档阅读笔记-QSet官方解析及实例
目錄
?
官方解析
博主栗子
官方解析
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*>:
?
對于同樣的代碼,可以使用STL風(fēng)格的iterator;
QSet<QWidget *>::const_iterator i = set.constBegin();while (i != set.constEnd()) {qDebug() << *i;++i;}QSet是無序的,所以iterator的指向也是未知的,如果需要有序的鍵值,那么得使用QMap。
遍歷QSet,還可以使用foreach:
使用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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ STL 乱序算法
- 下一篇: java题-java运行时异常与一般异常