>백엔드 개발 >C++ >원본 인덱스를 유지하면서 C에서 데이터를 어떻게 정렬할 수 있습니까?

원본 인덱스를 유지하면서 C에서 데이터를 어떻게 정렬할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-21 16:28:09510검색

How Can I Sort Data in C   While Maintaining Original Indices?

C에서 원래 위치를 유지하면서 데이터 정렬

C에서는 원래 위치를 유지하면서 요소 모음을 정렬해야 하는 경우가 많습니다. . 이는 외부 요인이 이러한 위치에 따라 달라질 때 매우 중요합니다.

샘플 세트 A = [5, 2, 1, 4, 3]을 고려하세요. 표준 정렬 기능을 사용하여 이 세트를 정렬하면 B = [1,2,3,4,5]가 생성됩니다. 그러나 우리는 또한 정렬된 요소의 원래 인덱스를 추적하여 원래 A 내의 B에 있는 각 요소의 인덱스를 나타내는 집합 C = [2, 1, 4, 3, 0]을 생성하려고 합니다.

C 11 람다를 사용한 솔루션

C 11 람다를 사용하면 이 문제를 편리하게 해결할 수 있습니다. 문제:

#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>

using namespace std;

template <typename T>
vector<size_t> sort_indexes(const vector<T> &amp;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
  stable_sort(idx.begin(), idx.end(),
       [&amp;v](size_t i1, size_t i2) {return v[i1] < v[i2];});

  return idx;
}

이 구현에서는 먼저 원본 인덱스를 사용하여 벡터 idx를 만듭니다. 그런 다음 stable_sort를 사용하여 인덱스를 정렬하여 동일한 값을 가진 요소가 상대적 순서를 유지하도록 합니다. 결과 벡터 idx에는 정렬된 인덱스가 포함됩니다.

사용

이 함수를 사용하려면 값의 벡터를 전달하고 정렬된 인덱스를 반복하면 됩니다. 인덱스:

for (auto i: sort_indexes(v)) {
  cout << v[i] << endl;
}

사용자 정의

sort_indexes 함수는 특정 요구 사항에 맞게 사용자 정의할 수 있습니다. 예를 들어, 고유한 원래 인덱스 벡터를 제공하거나, 사용자 정의 정렬 함수 또는 비교기를 제공하거나, 추가 벡터를 사용하여 정렬하는 동안 v를 재정렬할 수 있습니다.

위 내용은 원본 인덱스를 유지하면서 C에서 데이터를 어떻게 정렬할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.