Современный подход к сортировке в Qt-проектах заключается в использовании стандартного алгоритма std::sort из STL. Он отлично работает с контейнерами Qt, такими как QList и QVector, при условии, что они поддерживают RandomAccessIterator. В этой статье приведены примеры сортировки строк (QList<QString>) и пользовательских структур.
Сортировка QList<QString> по алфавиту
#include <QList>
#include <QString>
#include <algorithm>
#include <iostream>
int main() {
QList<QString> names = {"Charlie", "Alice", "Bob"};
std::sort(names.begin(), names.end());
for (const auto& name : names)
std::cout << name.toStdString() << " ";
// Вывод: Alice Bob Charlie
}
По умолчанию std::sort использует оператор <, который уже определён для QString.
Сортировка по убыванию
std::sort(names.begin(), names.end(), std::greater<QString>());
// Или с использованием лямбда-функции:
std::sort(names.begin(), names.end(), [](const QString& a, const QString& b) {
return a > b;
});
Сортировка пользовательских структур
struct Person {
QString name;
int age;
};
// Создадим список:
QList<Person> people = {
{"Alice", 30},
{"Bob", 25},
{"Charlie", 35}
};
// Сортировка по возрасту:
std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) {
return a.age < b.age;
});
// Сортировка по имени:
std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) {
return a.name < b.name;
});
Особенности и советы
QListиQVectorподдерживают RandomAccess итераторы, поэтому они совместимы соstd::sort.- Убедитесь, что вы подключили
<algorithm>. - В Qt 6 рекомендуется использовать
QListвместоQVectorтам, где важна компактность хранения. - Для стабильной сортировки (если важно сохранить исходный порядок при равных элементах) используйте
std::stable_sort.
Использование std::sort в Qt-проектах — это надежный и современный способ сортировки данных. Он предоставляет гибкость, совместимость с C++-стандартом и превосходит устаревший qSort как по производительности, так и по поддержке в новых версиях Qt.
Используйте std::sort для:
- Сортировки строк
- Сортировки структур по полям
- Создания читаемого и легко поддерживаемого кода
