#include <iostream>
#include <vector>
#include <algorithm>
template <typename T>
std::vector<size_t> argsort(const std::vector<T>& vec) {
std::vector<size_t> indices(vec.size());
std::iota(indices.begin(), indices.end(), 0);
std::sort(indices.begin(), indices.end(), [&vec](size_t i, size_t j) {
return vec[i] < vec[j];
});
return indices;
}
int main() {
// Example usage
std::vector<double> data = {4.2, 2.8, 7.1, 1.5, 9.3};
std::vector<size_t> sorted_indices = argsort(data);
// Displaying sorted indices
std::cout << "Original Data: ";
for (const auto& value : data) {
std::cout << value << " ";
}
std::cout << "\nSorted Indices: ";
for (const auto& index : sorted_indices) {
std::cout << index << " ";
}
return 0;
}