我希望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);
}
}