给定一个数组arr = {5,16,4,7},我们可以通过sort()进行排序。
arr = {5,16,4,7}
sort(arr.begin(), arr.end())
得到:
arr = {4,5,7,16}
,排序数组的置换索引为{2,0,3,1}
假设a是需要排序列表,b是原始索引表,实质是根据a的value去对b进行重排列。
这个[&a](int i, int j)->bool{return a[i] < a[j]; });是一个lamda表达式,其中重要的是需要捕获一下a才行,否则不认a。
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;
}