C 정렬 중 원본 인덱스 보존
원본 인덱스를 유지하면서 데이터를 정렬하는 것은 데이터 조작 작업의 일반적인 요구 사항입니다. C에서 표준 라이브러리를 사용하여 이 작업은 다음 단계를 포함합니다.
C 11의 구현:
#include <iostream> #include <vector> #include <numeric> // std::iota #include <algorithm> // std::sort, std::stable_sort using namespace std; template <typename T> vector<size_t> sort_indexes(const vector<T> &v) { // Initialize original index locations vector<size_t> idx(v.size()); iota(idx.begin(), idx.end(), 0); // Sort indexes based on comparing values in v // Using std::stable_sort instead of std::sort // to avoid unnecessary index re-orderings // when v contains elements of equal values stable_sort(idx.begin(), idx.end(), [&v](size_t i1, size_t i2) {return v[i1] < v[i2];}); return idx; }
사용 예:
vector<double> values = {5, 2, 1, 4, 3}; vector<size_t> sorted_indexes = sort_indexes(values); for (auto i : sorted_indexes) { cout << values[i] << endl; }
위 내용은 C에서 데이터를 정렬할 때 원래 인덱스를 어떻게 보존할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!