从另一个 c++ 对数组进行排序

Ordering an array from another c++

本文关键字:排序 数组 另一个 c++      更新时间:2023-10-16

我正在尝试对另一个数组进行排序,但我不知道该怎么做,我知道std::sort存在,但我不知道如何将其与另一个数组一起使用。

说明:

我有一个包含多个向量的结构:

struct Data
{
   std::vector<float> zPosition;
   std::vector<float> alpha;
   std::vector<int>   life;
   std::vector<Color> colors; // rgba (unsigned char)
   …
}

我想对 zPosition 数组(从远到近)进行排序,但由于性能原因我无法交换每个数组

所以我的想法是使用另一个数组std::vector<int> IDArray.目标是用zPosition数据对这个数组进行排序(稍后的目标是将带有life = 0的元素放在数组的末尾)

在渲染过程中,我可以做这样的事情:

for( int i = 0; i < Data.elementCount; i++ )
{
   int ID = IDArray[i];
   float zPosition = Data.zPosition[ID];
   float alpha     = Data.alpha[ID];
   // ...
}

我想使用 std::sort,但此方法将zPosition数组进行排序,而不是 ID 数组。

我该怎么做?

谢谢!

如果你有一个容器IDArray,里面有所有int索引,你可以这样做:

std::sort(IDArray.begin(), IDArray.end(), [&data](int index1, int index2) {
  return data.zPosition[index1] < data.zPosition[index2];
});