我正在编写一个程序来计算凸面外壳的周长,使用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;
}

07-27 18:22