Graphisoft®

GSRootVersion: 1.0

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!개입니다. 여기서 Nlast - first입니다) 그래서 순열들을 LexicographicalCompare로 정렬하면, 순열이 사전적으로 다음인 명확한 정의가 있습니다. 만약 그러한 순열이 존재한다면, NextPermutation[first, last)를 순열로 변환하고 true를 리턴합니다. 그 외에는 [first, last)를 사전적으로 가장 작은 순열로 변환하고 false를 리턴합니다. 후조건은 리턴 값이 true일 경우에만 요소들의 새로운 순열은 (LexicographicalCompare에서 정한대로) 사전적으로 예전보다 더 크다는 것입니다. NextPermutation의 2가지 버전은 어떤 요소가 다른 요소보다 작다는 것을 어떻게 정의하느냐에 따라 달라집니다. 1번째 버전은 operator<를 사용하여 객체들을 비교하고, 2번째 버전은 술어 pred를 사용하여 객체들을 비교합니다.

참고사항

알고리즘