Примеры сортировки QList с использованием std::sort в Qt

Автор: | 12 июня, 2025

Современный подход к сортировке в 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 для:

  • Сортировки строк
  • Сортировки структур по полям
  • Создания читаемого и легко поддерживаемого кода