Имея только стандартную библиотеку, существующую в C ++ 17 (или, на самом деле, C ++ 11), вы создаете вектор индексов и сортируете его, используя себя в качестве проекции:
vector<int> idxs(values.size());
iota(idxs.begin(), idxs.end(), 1);
sort(idxs.begin(), idxs.end(), [&](int i, int j){
return values[i-1] < values[j-1];
});
Другой способ генерации индексов - использовать generate_n
:
vector<int> idxs;
generate_n(back_inserter(idxs),
values.size(),
[cnt=1]() mutable { return cnt++; });
// same sort()