2013-04-17 26 views
0

我有一个小问题在C++中,我希望你能帮助我。定义运算符<在结构中的另一个结构的2个对象

我想定义一个struct myPoint。这个结构应该能够比较类型点中的两个对象(定义为pair)。我希望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" 

现在看来似乎是syntacticly可能使该运营商只有一个点,我想它会比较点到myPoint,但是这不是它应该是什么。 问题的背景是,我想使用预定义的排序函数来排序向量的点和排序“函数”我想提供一个myPoint对象。

+1

你的'operator <'根本没有意义 - 你会怎么称呼它?另外,'inline'是多余的,因为你的函数已经被定义在一个类中,因此自动'inline'。 –

回答

0

我认为(也许)那是你正在尝试做的是写一个仿

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

函子可以作为第三个参数为std ::排序进行传递。

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

尽管我怀疑,假设ccw指的是逆时针方向,我不认为这是一个有效的排序条件。

+0

谢谢!对于快速和伟大的答案,是的,这正是我想要做的。我读了某事。关于仿函数,编码它,稍微改变了排序条件,现在它工作;) - thx – user2292605

0

<定义只有一个参数的过载。正如@KonradRudolph指出,这是没有意义在这种情况下超负荷<,因为你不能在分拣使用它或任何

typedef pair<int,int> point; 
struct myPoint{ 
    point p; 
    bool smaller(const point &a, const point &b) 
    { 
     return !ccw(p,a,a) 
    } 
}; 
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. 使用常量引用。
相关问题