从另一个c ++订购数组

时间:2014-02-20 21:32:02

标签: c++ sorting c++11

我正在尝试用另一个来排序数组,但我不知道该怎么做,我知道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数组。

我该怎么做?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您的容器IDArray中包含所有int索引,则可以执行以下操作:

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