对于结构体分级排序,例如:
typedef struct Point{
int x;
int y;
float z;
int index;
}Point;
现在要将vector<Point>
数据按照x从小到大,y从小到大,z从大到小排序。
解决方法:利用运算符重载。
typedef struct Point{
int x;
int y;
float z;
int index;
bool operator < (const Point &b){
if(x != b.x){
return x < b.x;
} else if(y != b.y){
return y < b.y;
}else{
return z > b.z;
}
}
}Point;
以下是错误写法!
typedef struct Point{
int x;
int y;
float z;
int index;
bool operator < (const Point &b){
if(x < b.x) return true; // 此处当x > b.x时,应该返回false,但是却进入了下一个判断
if(y < b.y) return true;
if(z > b.z) return true;
return false;
}
}Point;