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

참조 벡터를 기반으로 여러 벡터를 일관되게 정렬하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-14 15:50:11
원래의
473명이 탐색했습니다.

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

다른 벡터의 값을 기준으로 벡터 정렬

동일한 길이의 벡터가 여러 개 있고 동일한 벡터를 유지하면서 벡터 중 하나를 정렬해야 하는 시나리오를 생각해 보세요. 다른 모든 벡터에 대한 정렬 순서. 이는 정렬된 값이 다른 벡터의 요소에 대한 참조 역할을 할 때 유용할 수 있습니다.

제공된 코드 조각에는 인덱스와 값이라는 두 개의 벡터가 있습니다. 인덱스에는 원하는 정렬 순서를 나타내는 정수가 포함되고 값에는 그에 따라 정렬될 문자열이 포함됩니다.

한 가지 접근 방식은 인덱스와 값의 요소를 결합하는 쌍의 벡터를 만든 다음 다음을 사용하여 이 벡터를 정렬하는 것입니다. 사용자 정의 비교기. 방법은 다음과 같습니다.

using myiter = std::vector<int>::const_iterator;

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

size_t n = 0;
for (const auto& it : Index) {
    order[n++] = std::make_pair(n, it);
}

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

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

이제 순서 벡터에는 정렬된 순서로 인덱스 및 값의 요소가 포함됩니다. 이를 사용하여 다른 벡터를 정렬할 수도 있습니다. 다음은 이를 수행하는 함수 템플릿입니다.

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

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

    return ret;
}
로그인 후 복사

이 함수를 사용하면 이제 Index에서 지정한 순서에 따라 정렬된 버전의 값을 얻을 수 있습니다.

std::vector<std::string> sortedValues = sort_from_ref(Values, order);
로그인 후 복사

이 접근 방식을 사용하면 복잡하고 반복적인 솔루션 없이도 여러 벡터를 일관된 방식으로 효율적으로 정렬할 수 있습니다.

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

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