C++ 使用c+;中的next_permutation()stl在两个数组中进行相同的置换+;
是否有一种简单的方法来进行下一次排列,以执行相同大小的两个不同数组之间的同一组交换 例如 如果我有两个数组C++ 使用c+;中的next_permutation()stl在两个数组中进行相同的置换+;,c++,algorithm,stl,C++,Algorithm,Stl,是否有一种简单的方法来进行下一次排列,以执行相同大小的两个不同数组之间的同一组交换 例如 如果我有两个数组a[]={1,2,3,4,5}和b[]={12,23,21,2,3} 如果数组a中的排列1后移到第3位,那么数组b中的12也应移到第3位。您可以设置一个辅助索引: int a[] = { 1, 2, 3, 4, 5 }; int b[] = { 12, 23, 21, 2, 3 }; std::size_t indices[] = { 0, 1, 2, 3, 4 }; 现在在索引上执行排
a[]={1,2,3,4,5}
和b[]={12,23,21,2,3}
如果数组a中的排列1后移到第3位,那么数组b中的12也应移到第3位。您可以设置一个辅助索引:
int a[] = { 1, 2, 3, 4, 5 };
int b[] = { 12, 23, 21, 2, 3 };
std::size_t indices[] = { 0, 1, 2, 3, 4 };
现在在
索引上执行排列
,然后使用a[index[i]
和b[index[i]]
记住std::next\u排列不保持任何状态(这与stl算法的概念相违背)。那么它是如何生成下一个排列的呢?它是按元素的顺序进行的。这就是为什么有一个接受比较运算符的版本
如果给它一个大小为N的排序数组,那么下一个排列可以称为N!时代。否则,在算法返回false之前,您的排列会更少
为了回答您的问题,如果数组在“辅助索引集”方面的顺序与上面建议的相同,那么将交换相同的元素
例如:
int a[] = { 1, 2, 4, 3 };
int b[] = { 11, 12, 14, 13 };
因为排序将产生相同的索引顺序,所以它们将被相同地排列