2015-11-04 111 views
0

我有一个自定义对象的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方法来按降序排列索引数组。如果它有帮助,我可以发布一些代码,但它是一个更大的程序的一部分,有些类是子类的,所以我担心如果没有看到它,这是没有意义的。

回答

1

传递一个比较仿函数到您的排序功能:

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]; 
}); 

相关问题