對數組進行排序並返回索引表的C++ stl實現

      如何利用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;
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章