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