Create an array of indexes, fill it with numbers 0..N-1, and sort it using a custom comparator. The comparator should compare items from the original array at indexes lhs
and rhs
. Sorting the array of indexes this way reorders them as a permutation:
vector<int> data = {5, 16, 4, 7};
vector<int> index(data.size(), 0);
for (int i = 0 ; i != index.size() ; i++) {
index[i] = i;
}
sort(index.begin(), index.end(),
[&](const int& a, const int& b) {
return (data[a] < data[b]);
}
);
for (int i = 0 ; i != index.size() ; i++) {
cout << index[i] << endl;
}
This prints 2, 0, 3, 1
Here is a demo on ideone.
Note: you can use index
to retrieve the data
in sorted order:
for (int i = 0 ; i != index.size() ; i++) {
cout << data[index[i]] << endl;
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…