0

重複の可能性:
C++ でループをハードコーディングせずに複数のベクトルの組み合わせを作成する方法は?

私の質問はこの組み合わせの質問に似ていますが、私の場合、N (N > 4) の小さなセットがあり (今のところセットあたり 1-2 アイテムは 3 多分 4 になる可能性があります)、各セットから 1 つのアイテムの各組み合わせを生成したいと考えています。 .

現在のソリューションは、これに沿ったものに見えます

for(T:: iterator a = setA.begin(); a != setA.end(); ++a) 
 for(T:: iterator b = setB.begin(); b != setB.end(); ++b) 
  for(T:: iterator c = setC.begin(); c != setC.end(); ++c) 
   for(T:: iterator d = setD.begin(); d != setD.end(); ++d) 
    for(T:: iterator e = setE.begin(); e != setE.end(); ++e)
     something(*a,*b,*c,*d,*e);

シンプルで、効果的で、おそらくかなり効率的ですが、醜く、あまり拡張性がありません。これを行うためのより良い/よりクリーンな方法を知っている人はいますか?

理想的なソリューションは、単一のループのように見え、適切にサポートされているライブラリから得られるものです。

Combinations<T> comb;
comb.set(0) = setA;
comb.set(1) = setB;
comb.set(2) = setC;
comb.set(3) = setD;
comb.set(4) = setE;

for(Combinations<T>::iterator a = comb.begin(); a != comb.end(); ++a) 
  something(*a[0],*a[1],*a[2],*a[3],*a[4]);
4

1 に答える 1

1

生のパフォーマンス (=>再帰なし) が必要で、組み合わせの長さが実行時にしかわからない場合は、適応できるこのコードがあります。

それ以外の場合は、KennyTM のコメントでリンクされているような、より洗練されたソリューションがあります。

于 2010-05-18T15:28:36.500 に答える