💡 퀵 접속: cpp.kr/prev_permutation
C++ 표준 라이브러리의 알고리즘으로, 주어진 범위의 요소들을 사전식 순서로 이전 순열로 재배열합니다. 더 이상 이전 순열이 없는 경우 false를 반환합니다.
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {3, 2, 1};
// 모든 순열 출력
do {
for (int x : v) {
std::cout << x << " ";
}
std::cout << std::endl;
} while (std::prev_permutation(v.begin(), v.end()));
return 0;
}
실행 결과:
3 2 1 3 1 2 2 3 1 2 1 3 1 3 2 1 2 3
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 2, 3};
// 내림차순으로 모든 순열 출력
do {
for (int x : v) {
std::cout << x << " ";
}
std::cout << std::endl;
} while (std::prev_permutation(v.begin(), v.end(), std::greater<int>()));
return 0;
}
실행 결과:
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
struct Person {
std::string name;
int age;
bool operator<(const Person& other) const {
return age < other.age;
}
};
int main() {
std::vector<Person> people = {
{"Charlie", 30},
{"Bob", 25},
{"Alice", 20}
};
// 모든 순열 출력
do {
for (const auto& person : people) {
std::cout << person.name << " (" << person.age << "세) ";
}
std::cout << std::endl;
} while (std::prev_permutation(people.begin(), people.end()));
return 0;
}
실행 결과:
Charlie (30세) Bob (25세) Alice (20세) Charlie (30세) Alice (20세) Bob (25세) Bob (25세) Charlie (30세) Alice (20세) Bob (25세) Alice (20세) Charlie (30세) Alice (20세) Charlie (30세) Bob (25세) Alice (20세) Bob (25세) Charlie (30세)
| 함수 | 설명 |
|---|---|
| prev_permutation(first, last) | 기본 비교 연산자를 사용하여 이전 순열 구하기 |
| prev_permutation(first, last, comp) | 커스텀 비교 함수를 사용하여 이전 순열 구하기 |