Ich habe ein Problem, und ich habe kämpfen um Stunden zu lösen, aber ich finde nicht den Weg.Wie bekomme ich alle möglichen Kombinationen von Vektor C++
Ich habe eine vector<vector<string>> mat
die ich nicht kenne die Größe, das einzige, was ich weiß ist, dass es die gleiche Anzahl von Strings auf jedem Vektor gibt. Nun, was ich versuche zu tun, ist, alle möglichen Kombinationen dieser Strings wie zu bekommen: Stellen Sie sich vor, mat.size()
= 3 und mat[0].size()
= 3 (denken Sie daran, alle Vektoren haben die gleiche Anzahl von Zeichenfolgen, so dass es egal ist, wenn make mat[0].size()
oder mat[3].size()
), was Ich mag würde, ist alle Fäden zu bekommen auf diese
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
positioniert und so weiter ....
Jede Zeile auf einem neuen Array/Vektor
Jede Idee, gespeichert werden ?
EDIT (in Fall ist nicht wirklich klar):
Stellen Sie sich vor, dass mat
die nächsten Daten hat:
mat[0] ={aa,bb,cc}
mat[1] ={dd,ee,ff}
mat[2] ={gg,hh,ll}
was ich will irgendwie bekommen ist:
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
Und so on ...
Wie wäre es mit ['std :: next_permutation'] (http://en.cppreference.com/w/cpp/algorithm/next_permutation)? –
Ich habe deine Frage nicht bekommen. Möchten Sie eine Kombination aller in der Matte gespeicherten Saiten? –
Um Joachims Vorschlag anzuwenden, erstellen Sie einen Vektor mit size_t mit den Werten 0 bis mat.size() * mat [0] .size() - 1 (in dieser Reihenfolge), und rufen Sie next_permutation für diesen Vektor auf. Verwenden Sie jeden Index * i * im Vektor, um mat [i/mat.size()] [i% mat [0] .size()] darzustellen. Oder kopieren Sie einfach alle Saiten in der Matte in einen neuen eindimensionalen Vektor, der sie permutiert .... –