template <typename T>
vector<size_t> sort_indexes_e(vector<T> &v)
{
vector<size_t> idx(v.size());
iota(idx.begin(), idx.end(), 0);
sort(idx.begin(), idx.end(),
[&v](size_t i1, size_t i2) {return v[i1] < v[i2]; });
return idx;
}
vector<int> vec = {5,31,9,11,8,21,9,7,4};
vector<size_t> idx;
idx = sort_indexes_e(vec);//注意vec中的内容不变,不是返回排序后的向量
输出:vec: 5 31 9 11 8 21 9 7 4
idx:8 0 7 4 2 6 3 5 1
参考