> 백엔드 개발 > C++ > C에서 데이터를 정렬할 때 원래 인덱스를 어떻게 보존할 수 있습니까?

C에서 데이터를 정렬할 때 원래 인덱스를 어떻게 보존할 수 있습니까?

Patricia Arquette
풀어 주다: 2024-12-30 18:37:09
원래의
399명이 탐색했습니다.

How Can I Preserve Original Indexes When Sorting Data in C  ?

C 정렬 중 원본 인덱스 보존

원본 인덱스를 유지하면서 데이터를 정렬하는 것은 데이터 조작 작업의 일반적인 요구 사항입니다. C에서 표준 라이브러리를 사용하여 이 작업은 다음 단계를 포함합니다.

  1. 벡터 초기화: 벡터를 생성하여 원본 데이터 값과 해당 인덱스를 저장하고 적절한 값으로 초기화합니다. 값.
  2. 색인 보존을 사용한 정렬: 다음과 같은 표준 알고리즘을 활용합니다. std::stable_sort는 원본 벡터 인덱스와 정렬된 벡터 인덱스 간의 상관 관계를 유지하면서 값별로 데이터를 정렬합니다.
  3. 정렬된 인덱스 반환: 정렬된 인덱스를 포함하는 벡터를 추출하고 반환합니다. 원래 요소의 순서.
  4. 예제 적용: 이후에 정렬된 색인을 사용합니다. 수정된 순서로 원본 벡터에서 데이터를 검색하는 반복.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿