基本上,我有一个 struct ,与其他成员一起, x , y 和 z 表示3D点的值;然后我有一个由一些函数构建的所述结构的向量。
struct myStruct{
char x;
char y;
char z;
// some other members
};
vector<myStruct> myVector = myVectorBuildingFunction(...);
现在,我想通过它们的3D点(x,y,z成员)与空间中的另一个变量点之间的距离来对矢量中的结构进行排序..这是可能的,而无需重建结构的成员一个(它们相对较多)或完全重塑我的初始矢量构建功能?
答案 0 :(得分:2)
您可以将std::sort
与lambdas一起使用,如下所示:
myStruct pointOfInterest = ...; // Set the point of interest
sort(mMyClassVector.begin(), mMyClassVector.end(),
[&](const myStruct & lhs, const myStruct & rhs) -> bool
{
double distanceLhs = computeDistance(pointOfInterest, lhs);
double distanceRhs = computeDistance(pointOfInterest, rhs);
return distanceLhs < distanceRhs;
});
答案 1 :(得分:1)
是的,可以使用比较器功能或functors。
struct byDistTo {
myStruct point;
byDistTo(myStruct point): point(point){}
bool operator() (const& myStruct a, const& myStruct b) const {
// define getDistance yourself
return getDistance(a, point) < getDistance(b, point);
}
}
稍后调用std :: sort:
vector<myStruct> myVector = myVectorBuildingFunction(...);
myStruct point = {1,2,3}; // define that 'another varialbe`
std::sort(myVector.begin(), myVector.end(), byDistTo(point));