正确的方法std :: sort一个N维浮点的std :: vector

时间:2017-11-03 14:56:28

标签: c++ sorting

我希望std::sort一个充满三维点的向量,每个点主要基于z值对齐,其次是y值,最后是x值。

所需的输出示例可能是

192 1 1
200 1 1
208 1 2
-296 2 2
-288 2 3

然而,我对std::sort的态度似乎并不是很好。一方面浮动上有一个==。另一方面,我的算子相当复杂。另外,如果我有一个N维点,这种方法很糟糕。还有更好的方法吗?

示例代码:

// Example program
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stdio.h>

struct point {
  float x;
  float y;
  float z;
};

int main()
{
    std::vector<point> foo = {
        { 1 ,  72 , 10 },
        { 2 ,  72 , 9 },
        { 3 ,  72 , 8 },
        { 32 ,  71 , 7 },
        { 4 ,  70 , -152 },
        { 32 ,  72 , -144 },
        { 5 ,  72 , -136 },
        { 5 ,  72 , -128 },
        { 5 ,  72 , -120 },
        { 32 ,  72 , -112 },
        { 32 ,  72 , -104 },
        { 32 ,  72 , -96 },
        { 32 ,  72 , -88 },
        { 32 ,  3 , -80 }
    };

  std::sort(
    foo.begin(),
    foo.end(),
    [](const point &a, const point &b) {
    if (a.z < b.z) return true;
    if (a.z == b.z && a.y < b.y) return true;
    if (a.z == b.z && a.y == b.y && a.x < b.x) return true;
    return false;
    }
  );

  for(auto p : foo) {
      printf("%f,%f,%f\n", p.x, p.y, p.z);
  }
}

0 个答案:

没有答案