Как я могу заставить min_element ловить ВСЕ точки с наименьшим значением?

Я пишу программу для расчета периметра выпуклой оболочки, используя сканирование Грэма и нужно найти самую низкую координату Y в наборе точек данных. я использую std::min_element(vector.begin(), vector.end()) с перегрузкой < оператор в моей структуре point, Проблема заключается в том, что некоторые точки могут иметь одинаковую координату Y, и в этом случае мне нужно сравнить их, используя их значения x. Есть ли какой-нибудь быстрый чит, чтобы проверить, имеют ли другие точки тот же y, что и min_element, без необходимости проходить через все?

структура:

struct cord{
cord():x(0),y(0){}
int x,y;
bool operator<(const cord &p) const { return y < p.y; }
};

typedef std::vector<cord>::iterator vecIter;

вызов функции:

vecIter lowestPoint =
std::min_element(points.begin(), points.end());

std::cout << "the lowest point of the data set is: " << "(" <<
lowestPoint->x << "," << lowestPoint->y << ")"  << std::endl;

0

Решение

Так вот, просто как то так? (чтобы заменить ваш существующий operator< функция)

bool operator<(const cord &p) const
{
if (y != p.y)
return y < p.y;
else
return x < p.x;
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]