C++自带的排序函数sort只能获得排好序的值,没办法像Matlab一样同时返回排序索引。
下面使用c++11中的 lambda来为sort函数添加一个模式:
#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;template <typename T>
vector<size_t> sort_indexes(const vector<T> &v) {// 初始化索引向量vector<size_t> idx(v.size());//使用iota对向量赋0~?的连续值iota(idx.begin(), idx.end(), 0);// 通过比较v的值对索引idx进行排序sort(idx.begin(), idx.end(),[&v](size_t i1, size_t i2) {return v[i1] < v[i2];});return idx;
}
上面的是升序排列,如果想要降序排列,只需要更改为:
[&v](size_t i1, size_t i2) {return v[i1] > v[i2];});