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()));
}

더 알아보기 (Learn more)

cppreference