У меня есть следующий функтор переопределения меньше оператора метода сортировки для векторного типа:функции внутри определения функтора
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);
};
, где getSlope функция определяется следующим образом:
double QSweep::getSlope(double a, double b, double c, double d){
double slope=0.0;
//std::cout<<"slope criteria"<<endl;
double denum=c-a;
if (denum==0){
std::cout<<"zero denominator"<<endl;
}
else{
slope=(d-b)/denum;
}
return slope;
}
Каждая точка задается индексом, координатой x и ay; Каждое ребро задается краем источника [0] и краем адреса [1], где edge [0], edge [1] являются индексами точек). Я хочу устроить ребро: - координатой x их ребра [0] координаты (если x из двух ребер различны) - координатой y их края [0] координаты (если x из 2 ребра равны) - по их соответствующим склонам (если х краев и у краев равны).
Я объявил функция getSLope статичны, но когда я сортировать края с
sort(myEdges_.begin(),myEdges_.end(),order());
последнее условие не fullfilled. если у меня есть два ребра с теми же x и y для edgep [0], но с разными склонами, например. наклон (edge1) = 1, наклон (edge2) = 1/2, чем я хотел бы получить [edge2, edge1]; вместо этого я получаю [edge1, edge2]. Итак, мои критерии getSlope не вычисляются.
Это потому, что я объявил getSlope статическим? что я должен изменить, чтобы критерии выполнялись? заблаговременно за ваши предложения, madalina
Я думаю, что у меня есть ложное && SomeFunction()
madalina
проверьте это с помощью отладчика или печатной части уравнения. если да - someFunction()
bayda