一意の値のみを持つベクトルがあり、すべてのペアを生成したいとします。そのためのアルゴリズムは次のとおりです。
vector< int > data;
// ... pushback some data
vector< vector< int > > pairs;
for( size_t i = 0; i < data.size() - 1; ++i )
{
for( size_t j = i + 1; j < data.size(); ++j )
{
vector< int > pair;
pair.push_back( data[i] );
pair.push_back( data[j] );
pairs.push_back( pair );
}
}
ここで、トリプルの場合、アルゴリズムは次のように変更されます。
vector< int > data;
// ... pushback some data
vector< vector< int > > triples;
for( size_t i = 0; i < data.size() - 2; ++i )
{
for( size_t j = i + 1; j < data.size() - 1; ++j )
{
for( size_t k = j + 1; k < data.size(); ++k )
{
vector< int > triple;
triple.push_back( data[i] );
triple.push_back( data[j] );
triple.push_back( data[k] );
triples.push_back( triple );
}
}
}
4倍およびその他のタプルタイプのコードを思い付くのはかなり簡単です。
誰かが、あらゆる種類のタプルを生成するための一般的なアルゴリズムを実現する方法を教えてもらえますか?そして、私たちはそれに取り組んでいるので、ベクトル内の要素の数を指定してタプルの数をどのように計算できますか?ペアの場合、式はn(n-1)/2です。
ありがとう!