std :: merge를 반복적으로 사용하여 여러 범위를 병합하려고합니다. 그것은 템플릿 인수 공제가 실패했다고 말합니다. 왜 컴파일되지 않는지 설명 할 수 있습니까? 문제는 여러 팩을 사용하고 있습니까?여러 개의 정렬 된 범위 병합
#include <algorithm>
#include <vector>
template <typename OutputIterator>
OutputIterator multi_merge (OutputIterator result) {return result;}
template <typename InputIterator1, typename InputIterator2, typename OutputIterator,
typename... InputIterators1, typename... InputIterators2>
OutputIterator multi_merge (InputIterator1 first1, InputIterators1... firsts1,
InputIterator1 last1, InputIterators1... lasts1,
InputIterator2 first2, InputIterators2... firsts2, InputIterator2 last2,
InputIterators2... lasts2, OutputIterator result) {
// incorrect algorithm deleted
return multi_merge (firsts1..., lasts1..., firsts2..., lasts2..., result);
}
int main() {
std::vector<int> a = {3,4,6,1,2}, b = {6,8,9,2}, c = {6,7,4,5,2}, result;
std::sort (a.begin(), a.end());
std::sort (b.begin(), b.end());
std::sort (c.begin(), c.end());
multi_merge (a.begin(), b.begin(), c.begin(), a.end(), b.end(), c.end(),
std::back_inserter(result));
}
또한, 나는 대신 ... 주문 첫번째 1, last1, first2, last2에로 인수를하고자하지만 사소한 일이다.
편집 : 내 병합 논리가 잘못되었음을 알았습니다. 이것이 방법이라고 생각합니다. [a1, b1]을 [a2, b2]와 병합 한 다음 결과 병합 범위 [merged1, merged2]를 사용하고 [a3, b3] 등과 병합합니다. 따라서 컴파일 오류는 더 이상 문제가되지 않습니다. 또 다른 아이디어는 각 범위의 모든 요소를 컨테이너에 복사 한 다음 정렬하는 것입니다 (그렇다고해도 말이되는 경우).하지만 이는 내가 찾는 해결책이 아니지만 그것이 유일한 방법이면 받아 들일 것입니다.
컴파일러 오류가 발생하면 질문에 포함하십시오. 복사/붙여 넣기가 바람직합니다. –
가변성 템플릿 매개 변수는 마지막 매개 변수 여야합니다. 'std :: tuple'을 사용하여 그들을 그룹화 할 수 있습니다. – Jarod42
템플릿 인수 공제가 실패했다고 말하지만 위의 내용은 누구나 사용할 수있는 완전한 예입니다. – prestokeys