Wenn Sie mit einfachen Typen arbeiten, können Sie Standard-Sortiermöglichkeiten verwenden. Wenn Sie komplexe Objekte nach einer Vielzahl von Parametern sortieren möchten, müssen Sie einen speziellen Komparator schreiben, der anhand der erforderlichen Parameter vergleicht.
Lassen Sie uns einen kleinen Komparator schreiben, der Objekte der Klasse QPointF sortiert. Sortierregeln werden einfach sein. Zunächst sollte nach der X-Koordinate sortiert werden, und wenn die X-Koordinaten gleich sind, dann sortieren wir nach der Y-Koordinate.
Das heißt, vor dem Sortieren könnte die Liste so aussehen:
(QPointF(12.4,15.4), QPointF(14.1,7.5), QPointF(7.2,5.2), QPointF(4.2,18.5), QPointF(4.2,1.2), QPointF(-19.5,12.4), QPointF(1.1,1.2))
Nach dem Sortieren sieht die Liste so aus:
(QPointF(-19.5,12.4), QPointF(1.1,1.2), QPointF(4.2,1.2), QPointF(4.2,18.5), QPointF(7.2,5.2), QPointF(12.4,15.4), QPointF(14.1,7.5))
Komparator
Schreiben wir den Komparator als statische Funktion:
// компаратор должен быть статической функцией, // иначе её нельзя будет передать её в качестве аргумента static bool compare(const QPointF& first, const QPointF& second) { if (first.x() < second.x()) { return true; } else if (first.x() > second.x()) { return false; } else { if (first.y() < second.y()) { return true; } else { return false; } } }
Mit einem Komparator
// Создадим и заполним список QList<QPointF> pointsList; pointsList << QPointF(12.4, 15.4) << QPointF(14.1, 7.5) << QPointF(7.2, 5.2) << QPointF(4.2, 18.5) << QPointF(4.2, 1.2) << QPointF(-19.5, 12.4) << QPointF(1.1, 1.2); // Проверим состав списка qDebug() << pointsList; // Отсортируем std::sort(pointsList.begin(), pointsList.end(), compare); // Проверим результат qDebug() << pointsList;
Das Ergebnis wird ähnlich dem sein, was am Anfang angegeben wurde.