> 백엔드 개발 > C++ > 다른 순서에 따라 `std::벡터`를 정렬하는 방법은 무엇입니까?

다른 순서에 따라 `std::벡터`를 정렬하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-12-07 12:16:13
원래의
718명이 탐색했습니다.

How to Sort One `std::vector` Based on the Order of Another?

다른 값으로 std::벡터 정렬 std::벡터

이 문제는 벡터의 순서를 다른 벡터의 순서 예를 들어, 벡터 Index에는 숫자 [3, 1, 2]가 포함되어 있고 벡터 Values에는 "Third, First, Second"라는 문자열이 포함되어 있습니다. 인덱스를 오름차순([1, 2, 3])으로 정렬하면 값이 해당 순서(["첫 번째", "두 번째", "세 번째"])로 정렬됩니다.

해결책 :

일반적인 접근 방식은 Index의 인덱스와 Values의 해당 요소를 결합하여 벡터 순서를 생성하는 것입니다. 그런 다음 인덱스의 요소를 비교하는 사용자 정의 비교기를 사용하여 이 벡터를 정렬할 수 있습니다.

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&amp; in,
    vector<pair<size_t, myiter>> const&amp; 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;
}

Values = sort_from_ref(Values, order);
로그인 후 복사

이 함수는 원본 벡터 in과 정렬된 인덱스가 포함된 참조 벡터를 가져와 그에 따라 정렬된 in의 복사본을 반환합니다.

위 내용은 다른 순서에 따라 `std::벡터`를 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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