>백엔드 개발 >C++ >원래 인덱스를 유지하면서 C에서 벡터를 어떻게 정렬할 수 있나요?

원래 인덱스를 유지하면서 C에서 벡터를 어떻게 정렬할 수 있나요?

DDD
DDD원래의
2024-12-25 02:50:13284검색

How Can I Sort a Vector in C   While Preserving Original Indices?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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