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

参考