0

我在 C++ 中有一个小问题,希望你能帮助我。

我想定义一个结构 myPoint。这个结构应该能够比较来自类型点的两个对象(定义为对)。我希望 myPoint 的每个“实例”都能够自己比较两个点。这就是我试图编码的内容:

typedef pair<int,int> point;
struct myPoint{
    point p;
    inline bool operator<( point x, point y ){
    return !ccw(p,x,y);
}

所以每个 myPoint 在比较两个点 x,y 时都应该考虑他自己的点 p。我得到的(翻译的)错误是

"error C2804:  Binary Operator '<' has too much Arguments/Parameters"

似乎在语法上可以只用一个点来制作这个运算符,我猜它会将一个点与一个 myPoint 进行比较,但这不是应该的。问题的背景是我想使用预定义的排序函数对点向量进行排序,并且作为排序“函数”,我想提供一个 myPoint 对象。

4

3 回答 3

0

<定义只有一个参数的重载。正如@KonradRudolph 所指出的,<在这种情况下重载是没有意义的,因为你不能在排序或任何事情中使用它

typedef pair<int,int> point;
struct myPoint{
    point p;
    bool smaller(const point &a, const point &b)
    {
        return !ccw(p,a,a)
    }
};
于 2013-04-17T21:50:33.457 回答
0

我认为(也许)你想要做的是写一个函子

struct myPoint
{
    myPoint(point p) { this->p = p; }
    bool operator()(point x, point y) const
    {
        return !ccw(p,x,y);
    }
    point p;
};

函子可以作为第三个参数传递给 std::sort。

std::sort(vec.begin(), vec.end(), myPoint(p));

不过我有疑问,假设 ccw 表示逆时针,我认为这不是一个有效的排序条件。

于 2013-04-17T21:46:42.220 回答
0

这个片段应该为你说明基本的事情:

#include <utility>

typedef std::pair<int,int> point;

bool less(const point& p1, const point& p2)
{
    return (p1.first < p2.first) ||
           ((p1.first == p2.first) && (p1.second == p2.second));
}

struct myPoint {
    point p;
    inline bool operator < (const point& p2) {
        return less(p, p2);
    }
};

int main()
{
    return 0;
}
  1. 您没有“关闭”运算符 <。
  2. 如果是像这里这样的方法,则运算符 < 只需要一个参数。
  3. 使用常量引用。
于 2013-04-17T22:08:52.863 回答