algorithm_prev_permutation
algorithm_prev_permutation (이전 순열)
std::prev_permutation는 범위를 사전식 순서상 이전 순열로 바꿔요. std::next_permutation의 역방향 연산이에요.
출처: cppreference
본문
std::prev_permutation는 범위 [first, last)를 이전 순열로 변환해요. 그런 순열이 존재하면 true를 돌려주고, 그렇지 않으면 범위를 마지막 순열(내림차순)로 바꾸고 false를 돌려줘요. <algorithm> 헤더에 정의되어 있어요.
template< class BidirIt >
bool prev_permutation( BidirIt first, BidirIt last );
template< class BidirIt, class Compare >
bool prev_permutation( BidirIt first, BidirIt last, Compare comp );
- 1번 오버로드 — 모든 순열이
operator<(즉std::less{})를 기준으로 사전식으로 정렬돼 있어요. - 2번 오버로드 — 모든 순열이 비교 함수
comp를 기준으로 정렬돼 있어요.
반환값 (Return value)
이전 순열로 바뀌었으면 true, 첫 순열이라 내림차순으로 되돌아가면 false예요.
복잡도 (Complexity)
최악의 경우 𝓞(N)번의 스왑이 필요해요 (여기서 N = std::distance(first, last)).
예제 (Example)
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v{3, 2, 1};
do {
for (int x : v) std::cout << x << ' ';
std::cout << '\n';
} while (std::prev_permutation(v.begin(), v.end()));
}