我正在编写一个程序来计算凸面外壳的周长,使用graham scan并需要在一组数据点中找到最低的y坐标我在structstd::min_element(vector.begin(), vector.end())
中使用带重载<
运算符的point
。问题是某些点可能共享相同的最低y坐标,在这种情况下,我需要使用它们的x值来比较它们有没有什么快速的技巧可以检查是否有其他点与min_元素共享相同的y,而不必遍历所有元素?
结构:
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;
}