다음 순열이 존재하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
다음은 next_permutation을 사용하는 예제입니다.
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3};
do {
for (int i : vec) {
std::cout << i << " ";
}
std::cout << std::endl;
} while (std::next_permutation(vec.begin(), vec.end()));
return 0;
}
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
이 예제에서는 {1, 2, 3}에 대한 모든 순열을 출력합니다. next_permutation 함수는 시퀀스를 재배열하여 사전식 순서로 다음 순열을 생성하며, 더 이상 순열이 없으면 false를 반환하여 루프를 종료합니다.
사용자 정의 비교 함수를 사용하는 예제도 있습니다:
#include <algorithm>
#include <iostream>
#include <vector>
bool custom_compare(int a, int b) {
return a > b; // 내림차순 비교
}
int main() {
std::vector<int> vec = {3, 2, 1};
do {
for (int i : vec) {
std::cout << i << " ";
}
std::cout << std::endl;
} while (std::next_permutation(vec.begin(), vec.end(), custom_compare));
return 0;
}
3 2 1
3 1 2
2 3 1
2 1 3
1 3 2
1 2 3
위 코드에서는 내림차순으로 정렬된 시퀀스에서 내림차순 기준으로 다음 순열을 생성합니다. 사용자 정의 비교 함수 custom_compare가 사용됩니다.
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 3, 2};
do {
for (int i : vec) {
std::cout << i << " ";
}
std::cout << std::endl;
} while (std::next_permutation(vec.begin(), vec.end()));
return 0;
}
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1