是否有一种简单的方法可以使next_permutation执行相同的交换,两个不同的相同大小的数组
例如
如果我有两个数组a[]={1,2,3,4,5}
和b[]={12,23,21,2,3}
如果在数组a中的perhtion 1之后进入第3个位置,则数组b中的12也应该进入第3个位置。
答案 0 :(得分:4)
您可以设置辅助索引:
int a[] = { 1, 2, 3, 4, 5 };
int b[] = { 12, 23, 21, 2, 3 };
std::size_t indices[] = { 0, 1, 2, 3, 4 };
现在在indices
上执行排列,然后使用a[indices[i]]
和b[indices[i]]
。
答案 1 :(得分:1)
请记住,std :: next_permutation不会保留任何状态(这会违反stl算法的概念)。那么它如何产生下一个排列呢?它按元素的顺序来做。这就是为什么有一个版本接受比较运算符
如果你给它一个大小为N的排序数组,那么next_permutation可以被称为N!倍。否则,在算法返回false之前,您的排列较少。
要回答你的问题,如果数组在上面建议的“辅助索引集”方面具有相同的顺序,那么将交换相同的元素。
示例:
int a[] = { 1, 2, 4, 3 };
int b[] = { 11, 12, 14, 13 };
这些将被置换相同,因为sort将产生相同的索引排序。