c++ - 如何使用 std::sort 以 'custom' 方式就地对数组进行排序

标签 c++ algorithm

我有一个大小为 4N 的 float 数组,我想通过将每组 4 个 float 视为一个项目来对它们进行排序 - 比如 (x, y, z, w),然后我想根据它们进行排序关于 z 值。

我目前的方法是制作一个数组

struct A
{
    float *p;
    int index;

    bool operator < (const A &obj)
    {
        return ( *(p + 2) < *(obj.p + 2) );
    }
};

对其使用std::sort,然后创建一个大小为4N的新数组,并根据相应的索引进行填充。

我确定有一种方法可以就地对其进行排序,但我不知道该怎么做

最佳答案

像这样:

struct A
{
    float x, y, z, w;

    bool operator < (const A &other) const
    {
        return z < other.z;
    }
};

enum { N = 1000 };
float v[4 * N];
...
A *w = reinterpret_cast<A*>(v);
sort(w, w + N);

关于c++ - 如何使用 std::sort 以 'custom' 方式就地对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49472208/

相关文章:

c++ - 为什么我可以在 C++ 中从外部访问私有(private)方法?

c++ - 使用 VC141 将 high_resolution_clock::time_point 转换为 time_t

c++ - MinGW + SFML 给出错误代码

c++ - websocketpp asio 监听错误

javascript - 检查数字内数字范围且不重复的最有效方法

javascript - 如何避免 Chrome 扩展中的 "fake"AJAX 请求

javascript - javascript中的快速稳定排序算法实现

algorithm - 针对包含限制的 TSP 的 Bellman–Held–Karp 算法

c++ - 玩家角色的背景颜色 (@) 与其他方 block 重叠

c++ - C++中绝对差计算的可变 block 大小和