我在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对象。
答案 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;
}