Қарапайым түрлермен жұмыс істегенде стандартты сұрыптау құралдарын пайдалануға болады. Егер күрделі объектілерді әртүрлі параметрлер бойынша сұрыптау қажет болса, онда қажетті параметрлер бойынша салыстыратын арнайы компаратор жазу қажет.
QPointF класының объектілерін сұрыптайтын шағын компараторды жазайық. Сұрыптау ережелері қарапайым болады. Ең алдымен Х координатасы бойынша сұрыптау керек, ал егер Х координаталары бірдей болса, онда У координатасы бойынша сұрыптаймыз.
Яғни, сұрыптау алдында тізім келесідей болуы мүмкін:
(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))
Сұрыптаудан кейін тізім келесідей болады:
(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))
Салыстырушы
Салыстырғышты статикалық функция ретінде жазайық:
// компаратор должен быть статической функцией, // иначе её нельзя будет передать её в качестве аргумента 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; } } }
Салыстырғышты пайдалану
// Создадим и заполним список 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;
Нәтиже басында берілгенге ұқсас болады.