Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用c+;中的next_permutation()stl在两个数组中进行相同的置换+;_C++_Algorithm_Stl - Fatal编程技术网

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 };
因为排序将产生相同的索引顺序,所以它们将被相同地排列