C++ 에서는 조합을 구할수 있는 라이브러리를 지원한다
next_permutation과 prev_permutation이다.
해당 함수는 c++ algorithm 헤더파일에 존재한다.
next_permutation은 오름차순을 내림차순을 변경하는 원리에서 나온다고 한다.
변경하는 과정에서 가능한 조합이 나온다. 그와 반대로 prev_permutation은 내림차순을 오름차순으로 변경하는 원리이다.
사용 예시:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int testArr[] = { 1, 2, 3, 4, 5}
do
{
for(int i = 0 ;i<5; ++i)
{
cout<<testArr[i] << " ";
}
cout << endl;
}while(next_permutation(testArr, 5);
return 0;
}
vector<pair<int, int>> 같이 기준이 모호한 경우는 정렬기준을 만들어주는 compare 함수를 만들어 인자로 입력 해주어야한다.
struct compareFirstPairMember {
bool operator()(const pair<int, int>& a, const pair<int, int>& b) const {
return a.first < b.first;
}
int main() {
vector<pair<int, int>> v;
v.push_back(pair<int,int>(3,600));
v.push_back(pair<int,int>(2,900));
v.push_back(pair<int,int>(2,800));
sort(v.begin(), v.end(), compareFirstPairMember());
do {
for(auto item : v)
cout << item.first << " " << item.second << endl;
cout << endl;
} while ( std::next_permutation(begin(v), end(v), compareFirstPairMember()));
return 0;
}