2015-11-04 55 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]; 
}); 

相關問題