Я пишу программу для расчета периметра выпуклой оболочки, используя сканирование Грэма и нужно найти самую низкую координату 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;
Так вот, просто как то так? (чтобы заменить ваш существующий operator<
функция)
bool operator<(const cord &p) const
{
if (y != p.y)
return y < p.y;
else
return x < p.x;
}
Других решений пока нет …