使用C++时,可以使用STL的sort函数对数据或向量进行排序,但如何像Matlab的sort函数一样获取排序索引呢?
[sort_v, index]=sort([3, 2, 1])
sort_v = 1 2 3
index = 3 2 1
使用如下函数(引自:http://qa.helplib.com/465162),即可获取向量v
的排列索引。
template < typename T>
vector< size_t> sort_indexes(const vector< T> & v) {
// initialize original index locations
vector< size_t> idx(v.size());
for (size_t i = 0; i != idx.size(); ++i) idx[i] = i;
// sort indexes based on comparing values in v
sort(idx.begin(), idx.end(),
[& v](size_t i1, size_t i2) {return v[i1] < v[i2];});
return idx;
}
其中sort(idx.begin(), idx.end(), [& v](size_t i1, size_t i2) {return v[i1] < v[i2];});
使用了lambda语法:
在 C++ 11 中,lambda 表达式(通常称为 “lambda”)是一种在被调用的位置或作为参数传递给函数的位置定义匿名函数对象的简便方法。 Lambda 通常用于封装传递给算法或异步方法的少量代码行。详见:http://www.cnblogs.com/hujian/archive/2012/02/14/2350306.html。