给定一些数组,我想循环遍历这些数组的所有可能的排列:
这是一个简单的例子:
#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;
}
然而循环排列的数量似乎取决于数组的起始值(这不是我希望在我的项目中使用的功能)。
这是因为 next_permutation 按字典顺序排列其元素。
我如何使用此函数获取给定数组的所有排列?还是我必须使用完全不同的方法?
我也知道这个答案,但我想避免事先对数组进行排序,因为我打算处理大量数组。
谢谢!
您可以通过间接映射排序数组 { 0, 1, 2 }来实现
输出:
假设元素是唯一的(就像另一个答案默默假设的那样)您可以计算迭代次数:
https://godbolt.org/z/oW1Yvsrzh https://godbolt.org/z/MKMMfdf9j