定义运算符<在struct中为另一个struct的2个对象

时间:2013-04-17 21:41:33

标签: c++ struct operator-keyword

我在C ++中遇到一些问题,希望你能帮助我。

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

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

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

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

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

3 个答案:

答案 0 :(得分: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意味着逆时针方向,我认为这不是一个有效的排序条件。

答案 1 :(得分:0)

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

typedef pair<int,int> point;
struct myPoint{
    point p;
    bool smaller(const point &a, const point &b)
    {
        return !ccw(p,a,a)
    }
};

答案 2 :(得分: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. 你没有'关闭'运营商&lt;。
  2. 运营商&lt;如果是这样的方法,则只需要一个参数。
  3. 使用常量引用。