繁体   English   中英

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

[英]Define Operator < in struct for 2 objects of another struct

我在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对象作为排序“函数”。

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

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表示逆时针方向,我认为这不是有效的排序条件。

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

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

该片段应为您说明基本内容:

#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. 使用常量引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM