如何利用lamda函數對vector類型進行排序並返回索引列表,
如果單純排序就直接用std::sort就可以實現,自己可以去定義cmp函數(比較函數)
但是如果想返回排序索引表就需要額外加點東西了,
a是需要排序列表,b是原始索引表,實質是根據a的value去對b進行重排列。
這個[&a](int i, int j)->bool{return a[i] < a[j]; });是一個lamda表達式,其中重要的是需要捕獲一下a才行,否則不認a。
#include "stdafx.h"
#include <vector>
#include <algorithm>
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<int> a = { 1, 5, 5, 3, 4, 9 };
std::vector<int> b = { 0, 1, 2, 3, 4, 5 };
for (auto k : a){
printf("k = %d\n", k);
}
std::sort(b.begin(), b.end(), [&a](int i, int j)->bool{return a[i] < a[j]; });
for (auto k : a){
printf("k = %d\n", k);
}
for (auto k : b){
printf("k = %d\n", k);
}
return 0;
}