> 백엔드 개발 > C++ > 참조 벡터를 기반으로 여러 벡터를 동시에 정렬하는 방법은 무엇입니까?

참조 벡터를 기반으로 여러 벡터를 동시에 정렬하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-03 18:16:43
원래의
305명이 탐색했습니다.

How to Sort Multiple Vectors Simultaneously Based on a Reference Vector?

외부 참조 벡터를 기반으로 벡터 정렬

동일한 길이의 벡터가 여러 개 존재하는 상황에서 하나의 벡터를 정렬하려면 다음과 같은 솔루션이 필요합니다. 그에 따라 다른 모든 벡터를 동시에 변환합니다.

다음을 고려하세요. 시나리오:

std::vector<int> Index = { 3, 1, 2 };
std::vector<std::string> Values = { "Third", "First", "Second" };
로그인 후 복사

변환: 인덱스가 정렬됩니다.

예상 결과: 값도 정렬되어야 합니다.

한 가지 접근 방식은 원래 인덱스와 정렬 지시의 요소를 모두 포함하는 벡터를 생성하는 것입니다. 벡터:

typedef vector<int>::const_iterator myiter;

vector<pair<size_t, myiter>> order(Index.size());

size_t n = 0;
for (myiter it = Index.begin(); it != Index.end(); ++it, ++n)
    order[n] = make_pair(n, it);
로그인 후 복사

다음으로 이 벡터가 정렬됩니다.

struct ordering {
    bool operator ()(pair<size_t, myiter> const&amp; a, pair<size_t, myiter> const&amp; b) {
        return *(a.second) < *(b.second);
    }
};

sort(order.begin(), order.end(), ordering());
로그인 후 복사

정렬된 순서를 사용하면 다른 벡터를 재배열할 수 있습니다.

template <typename T>
vector<T> sort_from_ref(
    vector<T> const& in,
    vector<pair<size_t, myiter>> const& reference
) {
    vector<T> ret(in.size());

    size_t const size = in.size();
    for (size_t i = 0; i < size; ++i)
        ret[i] = in[reference[i].first];

    return ret;
}
로그인 후 복사

위 내용은 참조 벡터를 기반으로 여러 벡터를 동시에 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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