1

所以基本上,我有一个结构,它与其他成员一起,具有xyz值来表示 3D 点;然后我有一个由一些函数构建的所述结构的向量。

struct myStruct{
    char x;
    char y;
    char z;
    // some other members
};

vector<myStruct> myVector = myVectorBuildingFunction(...);

现在,我想通过它们的 3D 点(x、y、z 成员)和空间中另一个变量点之间的距离对向量中的结构进行排序。如果不一一重建结构的成员(它们'相对较多)或完全重新制作我的初始矢量构建功能?

4

2 回答 2

2

您可以使用std::sortlambda,如下所示:

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;
});
于 2013-07-13T23:35:41.723 回答
1

是的,可以使用比较器函数或仿函数

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));
于 2013-07-13T23:37:15.683 回答