使用C++中的第二个索引数组对数组进行排序
问题描述:
我有一个自定义对象的arr1,但其中一个成员是arr1.percentChanged 我需要第二个数组存储arr1的索引值,按percentChanged排序,但这会使叶子第一个数组不变。使用C++中的第二个索引数组对数组进行排序
改变的百分比是双[8.67,-9.64,14.83,0.99,-5.33] 我将arr2初始化为[0,1,2,3,4],但我无法弄清楚如何对它进行排序。即它应该是[2,0,3,4,1]。任何帮助如何做到这一点将不胜感激。
我想我的问题是,我的第一个数组不是双精度数组,而是一个数组stockObject。所以arr1实际上是[obj1,obj2 ...],但每个obj都有一个obj.percentChanged成员。它们通过obj.name在arr1中排序。我有第二个名为stockListType的自定义对象需要sortPercentageIndex。 stockList对象有1个数组,它们按照从文件中读取的顺序存储所有stockObject。它也包含sortPercentageIndex数组。我需要一个sortByPercentage方法来按降序排列索引数组。如果它有帮助,我可以发布一些代码,但它是一个更大的程序的一部分,有些类是子类的,所以我担心如果没有看到它,这是没有意义的。
答
传递一个比较仿函数到您的排序功能:
struct comparePercentChanged
{
const double* arr1;
comparePercentChanged(const double* arr1): arr1(arr1) { }
bool operator < (int index1, int index2) const
{
return arr1[index1] < arr1[index2];
}
};
std::sort(begin(arr2), end(arr2), comparePercentChanged(arr1));
或者,你可以使用lambda(这一切都假定ARR2为int索引数组)
std::sort(begin(arr2), end(arr2), [const &arr1](int index1, int index2) -> bool
{
return arr1[index1] < arr1[index2];
});