SetSymmetricDifference
정렬된 소스 범위 중 하나에 속하지만 양쪽에 모두 속하지 않은 모든 요소를 단일 정렬된 대상 범위로 통합합니다. 여기서 순서 기준은 이항 술어로 지정될 수 있습니다.
template <class In1, class In2, class Out>
Out SetSymmetricDifference (
In1 first1,
In1 last1,
In2 first2,
In2 last2,
Out res
);
template <class In1, class In2, class Out, class BinPred>
Out SetSymmetricDifference (
In1 first1,
In1 last1,
In2 first2,
In2 last2,
Out res,
BinPred pred
);
Template 파라미터
- In1
-
입력 반복자입니다.
- In2
-
입력 반복자입니다.
- Out
-
출력 반복자입니다.
- BinPred
-
이항 술어(Binary predicate)입니다.
파라미터
- first1
-
2개의 소스 범위들의 대칭 차집합을 의미하는 단일 범위로 통합되고 정렬되는 2개의 정렬된 소스 범위들 중 1번째 범위의 1번째 요소의 위치를 설명하는 입력 반복자입니다.
- last1
-
2개의 소스 범위들의 대칭 차집합을 의미하는 단일 범위로 통합되고 정렬되는 2개의 정렬된 소스 범위들 중 1번째 범위의 마지막 직전 요소의 위치를 설명하는 입력 반복자입니다.
- first2
-
2개의 소스 범위들의 대칭 차집합을 의미하는 단일 범위로 통합되고 정렬되는 2개의 정렬된 소스 범위들 중 2번째 범위의 1번째 요소의 위치를 설명하는 입력 반복자입니다.
- last2
-
2개의 소스 범위들의 대칭 차집합을 의미하는 단일 범위로 통합되고 정렬되는 2개의 정렬된 소스 범위들 중 2번째 범위의 마지막 직전 요소의 위치를 설명하는 입력 반복자입니다.
- res
-
목적지 범위의 1번째 요소의 위치를 설명하는 출력 반복자입니다. 이 목적지 범위는 2개의 소스 범위들의 대칭 차집합을 의미하는 정렬된 단일 범위로 2개의 소스 범위들이 통합될 것입니다.
- pred
-
어떤 요소가 다른 요소보다 크다는 의미를 정의하는 사용자 정의 술어 함수 객체입니다.
이항 술어(binary predicate)는 2개의 인자를 취하며 1번째 요소가 2번째 요소보다 작으면 true를, 그 외에는 false를 리턴합니다.
리턴 값
2개의 소스 범위들의 대칭 차집합을 의미하는 정렬된 목적지 범위의 마지막 직전 요소의 위치를 설명하는 출력 반복자입니다.
설명
SetSymmetricDifference는 정렬된 범위들 [first1, last1)과 [first2, last2)의 대칭 차집합을 의미하는 정렬된 범위를 구성합니다.
리턴 값은 출력 범위의 끝입니다.
가장 단순한 경우, SetSymmetricDifference는 집합의 이론적 계산을 수행합니다:
이것은 두 집합 A - B와 B - A의 합집합을 구성합니다. 여기서 A와 B는 입력 범위들입니다.
즉, 출력 범위는 [first1, last1)에 있지만 [first2, last2)에는 없는 모든 요소의 사본과
[first2, last2)에 있지만 [first1, last1)에는 없는 모든 요소의 사본을 포함하고 있습니다.
일반적인 경우는 좀 더 복잡합니다. 왜냐하면 입력 범위들이 중복된 요소들을 포함할 수도 있기 때문입니다.
일반화하면, 어떤 값이 [first1, last1)에서 m번 나타나고 [first2, last2)에서 n번 나타나면,
(여기서 m 또는 n은 0이 될 수도 있음) 출력 범위에서는 |m-n|번 나타나게 됩니다.
SetSymmetricDifference는 안정적입니다. 이것은 각 입력 범위 안에 요소들의 상대적인 순서가 보존된다는 것을 의미합니다.
SetSymmetricDifference의 2가지 버전들은 어떤 요소가 다른 요소보다 작은지 여부를 결정하는 방법에서 차이가 있습니다.
1번째 버전은 operator<를 사용하여 객체들을 비교하고, 2번째 버전은 술어 pred를 사용하여 객체들을 비교합니다.
참고사항
알고리즘