У меня есть следующая структура данных.Как отсортировать QList <QVariant> в Qt?
QList<QVariant> fieldsList
Как я могу отсортировать этот список? Этот список содержит строки. Я хочу сортировать fieldList
в алфавитном порядке?
У меня есть следующая структура данных.Как отсортировать QList <QVariant> в Qt?
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);
}
С QSort :)
Найдено следующий пример:
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: [link] (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()' больше, поскольку он устарел (см. [Этот другой] (http://stackoverflow.com/a/27228639/1202500)). – mozzbozz
@mozzbozz 'QSet', в отличие от' QList', является неупорядоченным множеством. Хранение этих упорядоченных номеров в 'QSet', а затем преобразование его в' QList' является неочевидным способом псевдослучайного перетасовки чисел. –