使用c ++中的next_permutation()stl在两个数组中进行相同的排列

时间:2012-05-09 20:11:34

标签: c++ algorithm stl

是否有一种简单的方法可以使next_permutation执行相同的交换,两个不同的相同大小的数组 例如 如果我有两个数组a[]={1,2,3,4,5}b[]={12,23,21,2,3} 如果在数组a中的perhtion 1之后进入第3个位置,则数组b中的12也应该进入第3个位置。

2 个答案:

答案 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将产生相同的索引排序。