排序坐标结构的向量

时间:2018-06-28 07:21:58

标签: c++ sorting stl

我具有以下坐标类型:

template <typename T1, typename T2>
struct coords {
        T1 x;
        T2 y;
};

std::vector<coords<int, int>> pixels;

,我想使用x[]或任何其他可以处理它的函数对y[]std::sort进行排序。作为一种解决方法,我想到了将xy复制到单独的向量中,然后分别对它们使用std::sort,最后将结果复制回pixels

我想到了:

for (auto ita : pixels) {
    for (auto itb : pixels) {
        if (ita.x > itb.x) std::swap(ita.x, itb.x);
        if (ita.y > itb.y) std::swap(ita.y, itb.y);
    }
}

只是想知道是否有更有效的方法。

1 个答案:

答案 0 :(得分:0)

使用range-v3,您可以这样做:

ranges::sort(pixels | ranges::view::transform(&coords<int, int>::x));
ranges::sort(pixels | ranges::view::transform(&coords<int, int>::y));

Demo