C++で全ての順列を作りたければ、STLにnext_permutation関数があり、以下のように簡単に作ることができる。
#include <iostream>
#include <vector>
#include <algorithm>
int main(){
const int n = 3;
std::vector<int> data;
// [0, 1, 2, ....]というサイズnの配列を作成
for(int i=0; i<n; ++i){
data.push_back(i);
}
// 全ての順列を出力
do{
std::cout << "[ " << data[0];
for(unsigned int i=1; i<data.size(); ++i){
std::cout << ", " << data[i];
}
std::cout << " ]" << std::endl;
}while(next_permutation(data.begin(), data.end()));
return 0;
}
[ 0, 1, 2 ] [ 0, 2, 1 ] [ 1, 0, 2 ] [ 1, 2, 0 ] [ 2, 0, 1 ] [ 2, 1, 0 ]
しかし、STLには同じように組み合わせを作るための関数が存在しない。そこで全ての組み合わせを作るような関数を探してみた。