不是对数组进行排序,而是对索引进行排序。也就是说,你有
int arr[5]={4,1,3,6,2}
string arr1[5]={"a1","b1","c1","d1","e1"};
你让
int indices[5]={0,1,2,3,4};
现在你做了一个看起来像这样的排序索引比较器(只是和想法,你可能需要稍微修复它)
class sort_indices
{
private:
int* mparr;
public:
sort_indices(int* parr) : mparr(parr) {}
bool operator()(int i, int j) const { return mparr[i]<mparr[j]; }
}
现在你可以使用 stl 排序
std::sort(indices, indices+5, sort_indices(arr));
完成后,索引数组将是这样的arr[indices[0]]
是第一个元素。同样地arr1[indices[0]]
是对应的对。
当您尝试对大型数据对象进行排序时,这也是一个非常有用的技巧,您不需要在每次交换时移动数据,只需移动索引即可。