1. 程式人生 > >QT QVector qSort 排序

QT QVector qSort 排序

QT的演算法與容器之類的與存C++有一些區別。

標頭檔案:

#include <qalgorithms.h>

//這個用於qt排序演算法qSort的。

#include <QVector>

//這個是用於QT QVector容器的

純C++用的是

#include <algorithms.h>

#include <vector>

所以QT裡面的叫法也不一樣,C++叫STL,  而QT叫QTL

現在直接講QT一個排序例項吧:

標頭檔案(.h)的兩個私有成員:

static bool myCmpare(QPair<QString, qint64> p1, QPair<QString, qint64>  p2);

// 這裡很值得注意,static必須要用, 靜態成員,沒有this指標。

QVector<QPair<QString, qint64>> m_fromVector;

實現檔案(.cpp)的對應實現:

bool Test::myCmpare(QPair<QString, qint64> p1, QPair<QString, qint64>  p2)
{
return p1.second < p2.second;
}

bool Test::test()

{

........

foreach(QFileInfo fileInfo, customCacheDir.entryInfoList()) {
//m_recordService->mergeRecordToDub(fileInfo.filePath(),dubPath);
const qint64 from = fileInfo.fileName().split(QLatin1String("_")).at(0).toInt();
m_fromVector.push_back(qMakePair(fileInfo.filePath(), from));
}
qSort(m_fromVector.begin(), m_fromVector.end(), myCmpare);


for(QVector<QPair<QString, qint64>>::const_iterator iterat = m_fromVector.begin(); iterat != m_fromVector.end(); ++iterat ) {
m_recordService->mergeRecordToDub(iterat->first, dubPath);
}

........

//部分非使用程式碼省略

}

// 主要看這個qSort(m_fromVector.begin(), m_fromVector.end(), myCmpare);

這裡是對qSort演算法的直接用法。