可能重复:
Howto create combinations of several vectors without hardcoding loops in C++?
我的问题类似于this combinations question,但在我的情况下,我有N(N> 4)个小集(现在每集1-2个项目可能会变成3个可能4个)并想要生成每个组合每组中的一个项目。
目前的解决方案看起来像是
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]);
答案 0 :(得分:1)
如果您需要原始性能(=&gt;没有递归),并且只在运行时知道组合的长度,那么您可以调整this code of mine。
否则,有更优雅的解决方案,例如KennyTM在评论中链接的解决方案。