C++自带的排序函数sort只能获得排好序的值,没办法像Matlab一样同时返回排序索引。
下面使用c++11中的 lambda来为sort函数添加一个模式:
cpp
#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;
}
上面的是升序排列,如果想要降序排列,只需要更改为:
cpp
[&v](size_t i1, size_t i2) {return v[i1] > v[i2];});