我有以下數據結構。如何在Qt中對QList <QVariant>進行排序?
QList<QVariant> fieldsList
我該如何對此列表進行排序?該列表包含字符串。我想按字母順序排列fieldList
?
我有以下數據結構。如何在Qt中對QList <QVariant>進行排序?
QList<QVariant> fieldsList
我該如何對此列表進行排序?該列表包含字符串。我想按字母順序排列fieldList
?
我會做下列方式排序:
// Compare two variants.
bool variantLessThan(const QVariant &v1, const QVariant &v2)
{
return v1.toString() < v2.toString();
}
int doComparison()
{
[..]
QList<QVariant> fieldsList;
// Add items to fieldsList.
qSort(fieldsList.begin(), fieldsList.end(), variantLessThan);
}
隨着快速排序:)
發現下面的例子:
QSet<int> set;
set << 20 << 30 << 40 << ... << 70;
QList<int> list = QList<int>::fromSet(set);
qSort(list);
爲QList
排序您可以使用qSort
如果你喜歡用QVariant
進行排序或類似它有一些絆腳石。 取決於你喜歡做什麼,你可以編寫自己的操作符覆蓋。
但是它有很大的危險!因爲你可能需要比較不兼容的值
在QT5,似乎qSort
已被棄用。我們推薦使用:
#include <algorithm>
QList<QVariant> fieldsList;
std::sort(fieldsList.begin(), fieldsList.end());
參考:site
只是一個簡短的說明,顯然它仍然是有效的Qt4:[鏈接](http://doc.qt.io/qt-4.8/qtalgorithms.html#qSort) – Cerno
謝謝,我已經更新了我的答案。 – albertTaberner
int n;
int i;
for (n=0; n < fieldsList.count(); n++)
{
for (i=n+1; i < fieldsList.count(); i++)
{
QString valorN=fieldsList.at(n).field();
QString valorI=fieldsList.at(i).field();
if (valorN.toUpper() > valorI.toUpper())
{
fieldsList.move(i, n);
n=0;
}
}
}
爲什麼你首先要創建一個'QSet'你再轉換爲'QList'排序?這沒有意義。你可以直接創建QList。除此之外,您不應該再使用'qSort()',因爲它已被棄用(請參閱[this other](http://stackoverflow.com/a/27228639/1202500)答案)。 – mozzbozz
@mozzbozz與QList不同,QSet是一個無序集合。將這些有序數字存儲在'QSet'中,然後將其轉換爲'QList'是僞隨機混洗數字的一種不明顯的方式。 –