Dadas algumas matrizes, eu gostaria de fazer um loop em todas as permutações possÃveis dessas matrizes:
Aqui está um exemplo mÃnimo:
#include <array>
#include <iostream>
//#include <random>
#include <algorithm>
using namespace std;
int main() {
// Change the first number of the arrays to get a different number of permutations
// (this is not wanted)
array<int, 4> A = { 1,0,0,0 };
array<int, 4> B = { -9,0,0,0 };
array<int, 4> C = { 3,0,0,0 };
array<int, 4> temp[3] = { A, B, C };
int i = 1;
do {
cout << "This is the " << i++ << "-th permutation." << endl;
} while (next_permutation(temp, temp + 3));
// (it should yield 3! = 6 permutations but only yields 4)
return 0;
}
Entretanto, o número de permutações em loop parece depender do valor inicial da matriz (o que não é um recurso que desejo usar no meu projeto).
Isso ocorre porque next_permutation ordena seus elementos em ordem lexicográfica.
Como posso usar essa função para obter todas as permutações dos Arrays fornecidos? Ou preciso usar um método totalmente diferente?
Eu também conheço essa resposta , mas gostaria de evitar classificar meus arrays de antemão, pois estou planejando trabalhar com um grande número de arrays.
Obrigado!
Você pode fazer isso mapeando indiretamente a matriz classificada { 0, 1, 2 }
SaÃda:
Supondo que os elementos sejam únicos (como na outra resposta silenciosamente assume), você pode simplesmente calcular o número de iterações:
https://godbolt.org/z/oW1Yvsrzh https://godbolt.org/z/MKMMfdf9j