Как найти две минимальные точки в QVector?

Пытаюсь найти две минимальные точки в QVector. По умолчанию в векторе хранится не меньше трёх точек, тобишь треугольник, но может быть и больше точек. Вопрос, как правильно и оптимально найти 2 минимальные точки в векторе. P.s. QPointF содержит координату x() и y(). Это мой код, но чёт как-то он не работает.

QPointF firstPoint = points[0];
QPointF secondPoint = points[0];

for (int i = 0; i < points.size(); ++i) {
    const QPointF point = points.at(i);

    if (point.x() < firstPoint.x() && point.y() < firstPoint.y()) {
        firstPoint = point;
    } else if (point.x() < secondPoint.x() && point.y() < secondPoint.y()) {
        secondPoint = point;
    }
}

Ответы (1 шт):

Автор решения: Arty

Минимальной точка может быть только по одной из выбранных координат, либо по X, либо по Y, но не одновременно вместе (например какая из двух точек (1, 0) и (0, 1) будет минимальной по обоим координатам).

Либо, например, можно считать минимальной точку с наименьшим Евклидовым расстоянием от начала координат.

Также, как понимаю две минимальные точки означают что одна из них минимальна, т.е. имеет наименьшую метрику, а другая вторая по величине метрики, т.е. в отсортированном по метрике списке это будут две первые точки.

Ссылка на смежный пост с аналогичным вопросом и алгоритмом.

Привожу следующий код который для примера находит две точки минимальные по метрике расстояния по X:

QPointF min0, min1;
if (points.at(0).x() < points.at(1).x()) {
    min0 = points.at(0); min1 = points.at(1);
} else {
    min0 = points.at(1); min1 = points.at(0);
}

for (int i = 2; i < points.size(); ++i) {
    QPointF const & point = points.at(i);

    if (point.x() < min0.x()) {
        min1 = min0;
        min0 = point;
    } else if (point.x() < min1.x()) {
        min1 = point;
    }
}
→ Ссылка