argsort c++

#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;
}