由所述结构的特定成员对结构数组进行排序?

时间:2013-07-13 23:31:38

标签: c++

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

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

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

现在,我想通过它们的3D点(x,y,z成员)与空间中的另一个变量点之间的距离来对矢量中的结构进行排序..这是可能的,而无需重建结构的成员一个(它们相对较多)或完全重塑我的初始矢量构建功能?

2 个答案:

答案 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));