>백엔드 개발 >C++ >Boost 또는 STL을 사용하여 복사하지 않고 C에서 여러 벡터를 동시에 정렬하려면 어떻게 해야 합니까?

Boost 또는 STL을 사용하여 복사하지 않고 C에서 여러 벡터를 동시에 정렬하려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-10 13:14:14840검색

How Can I Sort Multiple Vectors in C   Simultaneously Without Copying, Using Boost or the STL?

Boost 또는 STL을 사용하여 C에서 압축된 컨테이너 정렬

소개

이 질문은 다음을 탐구합니다. 여러 벡터 또는 컨테이너를 함께 정렬하고 복사하지 않고도 해당 요소의 대응성을 유지해야 하는 문제입니다. 목표는 튜플이나 기타 임시 데이터 구조에 의존하지 않고 이를 달성하는 것입니다.

원래 질문

원래 질문은 특정 작업을 제시합니다. 즉, 세 개의 벡터를 정렬하는 동시에 다음을 보장합니다. 각 벡터의 요소가 동일한 순서로 재배열됩니다. 벡터를 튜플로 복사하거나 사용자 정의 정렬 기능을 구현하는 것은 명시적으로 제외됩니다. Boost::zip_iterator 또는 Boost::zip_range를 사용하려는 시도는 반복자의 읽기 전용 및 비무작위 액세스 특성으로 인해 실패했습니다.

답변

A 작업 솔루션은 tupleit.hh를 활용하여 interjay에서 제공되었습니다. library:

// tupleit.hh included for custom tuple iterators
#include <tupleit.hh>

template <typename... T>
auto zip(T&amp;... containers)
    -> boost::iterator_range<decltype(iterators::makeTupleIterator(std::begin(containers)...))> {
  return boost::make_iterator_range(iterators::makeTupleIterator(std::begin(containers)...),
                                      iterators::makeTupleIterator(std::end(containers)...));
}

이 템플릿 함수는 컨테이너를 튜플 반복자처럼 작동하는 Boost::iterator_range로 결합하여 Boost::sort:

boost::sort( zip(a, b, c), [](tup_t i, tup_t j){ return i.get<0>() > j.get<0>(); });

를 사용하여 정렬할 수 있도록 합니다. 향후 고려 사항

답변은 시퀀스 컨테이너(예: 벡터)에 적용되지만 Random_access 및 양방향 TupleIterator가 필요한 정렬 가능한 컨테이너로 확장하는 것이 바람직합니다. 그러나 표준 정렬 알고리즘은 현재 양방향 반복자를 지원하지 않습니다.

업데이트

현재 시퀀스와 유사한 컨테이너(예: 시퀀스 및 목록)를 혼합하는 것이 가능합니다. 그러나 목록을 통합하려면 현재 표준 라이브러리에서 사용할 수 없는 양방향 반복기에서 작동하는 정렬 알고리즘이 필요합니다.

위 내용은 Boost 또는 STL을 사용하여 복사하지 않고 C에서 여러 벡터를 동시에 정렬하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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