C++ 函子定义中的函数
我有以下函子,用于为向量类型重新定义排序方法的less运算符:C++ 函子定义中的函数,c++,C++,我有以下函子,用于为向量类型重新定义排序方法的less运算符: typedef vector< vector<int> > MxInt2d; typedef vector< vector<double> > MxDouble2d; class QSweep{ public: .... static MxDouble2d myPoints_; MxDouble2d myEdges_; class order{ public:
typedef vector< vector<int> > MxInt2d;
typedef vector< vector<double> > MxDouble2d;
class QSweep{
public:
....
static MxDouble2d myPoints_;
MxDouble2d myEdges_;
class order{
public:
bool operator() (const vector<int>& edge1, const vector<int>& edge2){
//std::cout<<"inside sort"<<endl;
//3 sort criteria
return (myPoints_[edge1[0]][0]<myPoints_[edge2[0]][0])||
(myPoints_[edge1[0]][0]==myPoints_[edge2[0]][0]&&
myPoints_[edge1[0]][1]<myPoints_[edge2[0]][1])
||
(myPoints_[edge1[0]][0]==myPoints_[edge2[0]][0]&&
myPoints_[edge1[0]][1]==myPoints_[edge2[0]][1]&&
getSlope(myPoints_[edge1[0]][0],myPoints_[edge1[0][1],
myPoints_[edge1[1]][0],myPoints_[edge1[1]][0])
<
getSlope(myPoints_[edge2[0][0],myPoints_[edge2[0][1],
myPoints_[edge2[1]][0],myPoints_[edge2[1]][0]));
}
};
static double getSlope(double a, double b, double c, double d);
};
最后一个条件未满。
如果我有两条边,边[0]的x和y相同,但斜率不同,例如,斜率(边1)=1,斜率(边2)=1/2,我希望得到的值
[edge2,edge1];相反,我得到了[1边,2边]。
因此,我的getSlope标准不会被计算
是因为我声明了getSlope static吗?我应该改变什么以满足标准?
提前感谢您的建议,
madalina可能是因为表达式结果可以在没有它的情况下进行计算。
例如: 这是一条很好的规则,它允许我们写下:
if ( ptr && ptr->someMethod() )
// call method will not be called for NULL pointers
哎呀!它看起来相当复杂,首先,您是否尝试过使用一组不太复杂的值来计算-例如,我看到您有cout语句,我相信它们在运行时能够正常工作 如果是这样的话,难道你对getSlope的输入是错误的吗
getSlope(myPoints_[edge2[0][0],myPoints_[edge2[0][1],
myPoints_[edge2[1]][0],myPoints_[edge2[1]][0])
是
我想我有false&&someFunction()用调试器或打印公式的部分来检查这一点。如果是-someFunction()是!!edge2的这个索引是错误的[1]。谢谢。是的,看起来很复杂。
false && someFunction(); - function will not be called
true || someFunction(); - function will not be called
if ( ptr && ptr->someMethod() )
// call method will not be called for NULL pointers
getSlope(myPoints_[edge2[0][0],myPoints_[edge2[0][1],
myPoints_[edge2[1]][0],myPoints_[edge2[1]][0])
getSlope(myPoints_[edge2[0][0],myPoints_[edge2[0][1],
myPoints_[edge2[1]][0],myPoints_[edge2[1]][1])