C에서 인덱스 보존을 사용한 정렬
데이터 조작 영역에서 정렬은 요소를 원하는 순서로 정렬하는 기본 작업입니다. 정렬 알고리즘은 본질적으로 동일한 요소의 순서를 유지하지만 원래 컨텍스트를 유지하기 위해 정렬된 요소의 원래 인덱스를 추적하는 것이 바람직할 수 있습니다.
이 문제에 대한 한 가지 접근 방식은 C 11에서 람다 함수를 사용하는 것입니다. 람다는 주변 범위에서 변수를 캡처할 수 있는 익명 함수입니다. 이를 통해 외부 데이터에 액세스할 수 있는 간결하고 유연한 정렬 작업이 가능합니다.
다음은 표준 라이브러리의 stable_sort 알고리즘과 람다를 결합하는 사용자 정의된 sort_indexes 함수입니다.
#include <vector> #include <algorithm> using namespace std; template <typename T> vector<size_t> sort_indexes(const vector<T> &v) { // Initialize original indexes vector<size_t> idx(v.size()); iota(idx.begin(), idx.end(), 0); // Sort indexes based on values in v stable_sort(idx.begin(), idx.end(), [&](size_t i1, size_t i2) { return v[i1] < v[i2]; }); return idx; }
이 함수에서 먼저 입력 벡터 v의 원래 인덱스로 벡터 idx를 초기화합니다. 그런 다음 stable_sort를 사용하여 람다 비교기를 기반으로 인덱스를 정렬합니다. v의 값을 비교합니다. stable_sort를 사용하면 동일한 값을 가진 요소가 정렬된 결과 내에서 원래 순서를 유지합니다.
이 함수를 사용하려면 단순히 요소의 벡터를 인수로 전달하면 반환됩니다. 정렬된 인덱스의 벡터입니다. 예를 들어, 벡터 [5, 2, 1, 4, 3]이 주어지면 반환된 벡터 idx는 [1, 2, 4, 3, 0]이 됩니다.
이 기술을 사용하면 요소를 정렬하는 동안 요소를 정렬할 수 있습니다. 원본 인덱스를 보존하여 후속 데이터 처리 작업에 유연성을 제공합니다.
위 내용은 원래 인덱스를 유지하면서 C에서 벡터를 어떻게 정렬할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!