Qt文档阅读笔记-QSet官方解析及实例
目錄
?
官方解析
博主栗子
官方解析
QSet類是一個模板類,他是一個哈希表集合。
QSet<T>是Qt的一個普通容器類。QSet存儲的值是不指明順序的,QSet對這些值提供了快速檢索的功能。他和QHash很像
PS:Set就是鍵值一樣的Hash
這里舉一個QSet中存儲QString的栗子:
QSet<QString> 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*>:
?
對于同樣的代碼,可以使用STL風格的iterator;
QSet<QWidget *>::const_iterator i = set.constBegin();while (i != set.constEnd()) {qDebug() << *i;++i;}QSet是無序的,所以iterator的指向也是未知的,如果需要有序的鍵值,那么得使用QMap。
遍歷QSet,還可以使用foreach:
使用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 <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(); }運行截圖如下:
當在此處下斷點時,運行截圖如下:
?
當在此處下斷點時,運行截圖如下:
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的Qt文档阅读笔记-QSet官方解析及实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ STL 乱序算法
- 下一篇: java题-java运行时异常与一般异常