Boost 또는 STL을 사용하여 C에서 압축된 컨테이너 정렬
동기화된 순서를 유지하면서 여러 컨테이너를 동시에 정렬하는 것은 일반적인 과제입니다. 이 질문은 Boost 라이브러리와 STL을 사용하여 데이터를 튜플이나 구조로 복사하는 데 따른 제한 사항을 해결하는 솔루션을 탐색합니다.
근본적인 문제는 배열 참조의 "쌍" 동작에 있습니다. 예상되는 반복자 특성. 이로 인해 참조 유형에서 값 유형 참조를 효과적으로 분리하는 부적합 반복자가 개발되었습니다.
Boost Solution
interjay의 허용된 답변은 " tupleit.hh" 라이브러리는 압축된 파일 정렬을 가능하게 하는 사용자 정의 튜플 반복자를 제공합니다. 컨테이너.
#include "tupleit.hh" #include <vector> #include <iostream> #include <boost/range.hpp> #include <boost/range/algorithm/sort.hpp> // Custom zip function template <typename... T> auto zip(T&... 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)...)); } int main() { // Example data std::vector<int> a = {1, 2, 3, 4}; std::vector<double> b = {11, 22, 33, 44}; std::vector<long> c = {111, 222, 333, 444}; // Sort zipped containers boost::sort(zip(a, b, c), [](auto& i, auto& j) { return i.get<0>() > j.get<0>(); }); // Print sorted results for (auto& tup : zip(a, b, c)) { std::cout << tup.get<0>() << " " << tup.get<1>() << " " << tup.get<2>() << std::endl; } return 0; }
이 솔루션을 사용하면 시퀀스 컨테이너를 별도의 구조로 복사하지 않고도 정렬할 수 있습니다.
Range-v3 솔루션
대체 접근 방식 STL에 대한 확장을 제안하는 range-v3 라이브러리를 활용하면 우아하고 간결한
#include <range/v3/all.hpp> #include <iostream> using namespace ranges; int main() { // Example data std::vector<int> a1{15, 7, 3, 5}; std::vector<int> a2{1, 2, 6, 21}; // Sort zipped containers sort(view::zip(a1, a2), std::less<>{}, &std::pair<int, int>::first); // Print sorted results for (auto& [x, y] : view::zip(a1, a2)) { std::cout << x << " " << y << std::endl; } }
혼합 컨테이너에 대한 고려 사항
제시된 솔루션은 시퀀스형 컨테이너의 정렬을 다루지만 혼합 유형(예: 목록)을 지원하도록 확장합니다. 및 시퀀스)에는 특수한 BidirectionIterator의 개발과 그러한 반복기와 호환되는 정렬 알고리즘의 구현이 필요합니다. 그러나 STL의 std::sort는 BidirectionIterator를 지원하지 않는다는 점은 주목할 가치가 있습니다.
결론적으로 Boost와 range-v3 솔루션은 모두 잠금 단계에서 여러 컨테이너를 정렬하는 효율적이고 사용자 정의 가능한 수단을 제공합니다. C의 데이터 조작에 대한 새로운 가능성.
위 내용은 Boost 또는 Range-v3를 사용하여 C에서 압축된 컨테이너를 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!