NextPermutation
원래 순서가 존재하는 경우 사전식 오름차순으로 범위 내 요소들을 재정렬합니다. 여기서 다음 순서에 대한 의미는 이항 술어로 지정될 수 있습니다.
template <class Bi>
bool NextPermutation (
Bi first,
Bi last
);
template <class Bi, class BinPred>
bool NextPermutation (
Bi first,
Bi last,
BinPred pred
);
Template 파라미터
- Bi
-
양방향 반복자입니다.
- BinPred
-
이항 술어(Binary predicate)입니다.
파라미터
- first
-
순서를 바꿀 범위의 1번째 요소의 위치를 가리키는 양방향 반복자입니다.
- last
-
순서를 바꿀 범위의 마지막 직전 요소의 위치를 가리키는 양방향 반복자입니다.
- pred
-
순서 상으로 요소들이 연속적이라는 조건을 만족하는 비교 기준을 정의하는 사용자 정의 술어 함수 객체입니다.
이항 술어(binary predicate)는 2개의 인자를 취하며 만족할 때에는 true를, 만족하지 않을 때에는 false를 리턴합니다.
리턴 값
만약 사전적으로 다음 수열이 존재하고 범위의 원래 순서를 대체했다면 true입니다; 그 외에는 false입니다.
이 경우 순서는 사전적으로 가장 작은 순열로 변환됩니다.
설명
NextPermutation은 범위 [first, last)의 요소들을 사전적으로 점점 커지는 순열로 변환합니다.
서로 다른 유한한 순열들이 있습니다. (최대 N!개입니다. 여기서 N은 last - first입니다)
그래서 순열들을 LexicographicalCompare로 정렬하면, 순열이 사전적으로 다음인 명확한 정의가 있습니다.
만약 그러한 순열이 존재한다면, NextPermutation은 [first, last)를 순열로 변환하고 true를 리턴합니다.
그 외에는 [first, last)를 사전적으로 가장 작은 순열로 변환하고 false를 리턴합니다.
후조건은 리턴 값이 true일 경우에만 요소들의 새로운 순열은 (LexicographicalCompare에서 정한대로) 사전적으로 예전보다 더 크다는 것입니다.
NextPermutation의 2가지 버전은 어떤 요소가 다른 요소보다 작다는 것을 어떻게 정의하느냐에 따라 달라집니다.
1번째 버전은 operator<를 사용하여 객체들을 비교하고, 2번째 버전은 술어 pred를 사용하여 객체들을 비교합니다.
참고사항
알고리즘