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演算法的直接用法。