在 c++ 中使用 next_permutation() stl 的两个数组中的相同排列
Same permutations in two arrays using next_permutation() stl in c++
有没有一种简单的方法可以让next_permutation执行相同的一组交换两个相同大小的不同数组例如如果我有两个数组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 };
现在对indices
执行排列,然后使用 a[indices[i]]
和 b[indices[i]]
。
请记住
,std::next_permutation 不保留任何状态(这将违背 stl 算法的概念)。那么它是如何生成下一个排列的呢?它按元素的顺序执行此操作。这就是为什么有一个接受比较运算符的版本
如果你给它一个大小为 N 的排序数组,那么next_permutation可以称为 N! 次。否则,在算法返回 false 之前,排列较少。
为了回答您的问题,如果数组在上面建议的"辅助索引集"方面具有相同的顺序,那么相同的元素将被交换。
例:
int a[] = { 1, 2, 4, 3 };
int b[] = { 11, 12, 14, 13 };
它们将排列相同,因为排序将产生相同的索引排序。
相关文章:
- 将fold表达式与std::一起用于两个元组
- 如何在C++中比较两个char数组
- 在c++中获取两个大int,并将它们存储在数组中
- 如何以优化的方式同时迭代两个间距不相等的数组
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 将字符串拆分为标记,并将标记拆分为两个单独的数组
- 可以将两个相同类型的连续数组视为一个数组吗?
- C++递归来决定数组中的两个值
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 按 Tab 单步执行两个控制组
- 如何检查两个元组的所有成员是否不同
- C 通过随机选择其元素从两个元组制成元组
- 如何将两个元组作为C 的参数发送
- 对于同一循环的这两个连续组,是否有更有效的解决方案
- 在 C++11 中加入两个元组
- 将两个双数组集组合为一个查找其并集和交集的最简单方法
- 如何创建一个在 C++11 (STL) 中压缩两个元组的函数
- 快速实现两个 8 位数组的协方差
- 如何绑定两个元组
- 将一个16位整数复制到一个两字节数组