【发布时间】:2016-05-07 14:47:32
【问题描述】:
我有一个问题,我已经挣扎了好几个小时来解决它,但我找不到方法。
我有一个vector<vector<string>> mat,我不知道它的大小,我唯一知道的是每个向量上有相同数量的字符串。现在,我想做的是获取这些字符串的所有可能组合,例如:
想象一下 mat.size() = 3 和 mat[0].size() = 3(记住,所有的向量都有相同数量的字符串,所以不管是 make mat[0].size() 还是 mat[3].size() )我想要的是让所有的字符串都打开这个职位
0,0 0,1 0,2
0,0 0,1 1,2
0,0 0,1 2,2
0,0 1,1 0,2
0,0 1,1 1,2
0,0 1,1 2,2
0,0 2,1 0,2
0,0 2,1 1,2
0,0 2,1 2,2
1,0 0,1 0,2
等等……
每一行都将存储在一个新的数组/向量中
有什么想法吗?
编辑(以防万一不是很清楚):
假设mat 有下一个数据:
mat[0] ={aa,bb,cc}
mat[1] ={dd,ee,ff}
mat[2] ={gg,hh,ll}
我想以某种方式得到的是:
aa,bb,cc
aa,bb,ff
aa,bb,ll
aa,ee,cc
aa,ee,ff
aa,ee,ll
aa,hh,cc
aa,hh,ff
aa,hh,ll
等等……
【问题讨论】:
-
我没有得到你的问题。您想要组合存储在 mat 中的所有字符串吗?
-
要应用 Joachim 的建议,创建一个 size_t 的向量,其值为 0 到 mat.size() * mat[0].size() - 1(按此顺序),然后在该向量上调用 next_permutation .使用向量中的每个索引 i 来表示 mat[i / mat.size()][i % mat[0].size()]。或者,只是先将mat中的所有字符串复制到一个新的一维向量中,然后置换它....
标签: c++ permutation