C++ 算法 next_permutation ()

2025年1月12日 | 阅读 4 分钟

C++ 算法 next_permutation() 函数用于将范围 [first, last) 中的元素重新排序为下一个按字典序更大的排列。

排列 (permutation) 定义为一组事物或数字可以被排序或排列的几种可能方式中的每一种。它表示为 N!,其中 N = 范围中的元素数量。

对于第一个版本,使用运算符 < 比较元素,或者对于第二个版本,使用给定的二元比较函数 comp 比较元素。

语法

参数

first:一个双向迭代器,指向要进行排列的范围中的第一个元素。

last:一个输入迭代器,指向要进行排列的范围中最后一个元素之后的位置。

comp:一个用户定义的二元谓词函数,它接受两个参数,如果这两个参数有序则返回 true,否则返回 false。它遵循严格弱序来对元素进行排序。

返回值

如果函数可以将对象重新排序为按字典序更大的排列,则返回 true。

否则,函数返回 false,表示排列不大于前一个排列,而是最低可能的排列(按升序排序)。

复杂度

复杂度最高为 first 和 last 之间距离的一半的线性复杂度。

数据竞争

范围 [first, last) 中的对象会被修改。

异常

如果元素被交换或迭代器操作引发异常,则此函数会引发异常。

注意:无效参数会导致未定义行为。

示例 1

让我们看一个简单的示例来演示 next_permutation() 的用法

输出

aab
aba 
baa

示例 2

让我们看另一个简单示例

输出

The 3! possible permutations with 3 elements:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
After loop: 1 2 3

示例 3

让我们看另一个简单示例

输出

1 2 3 4 
1 2 4 3 
1 3 2 4 
1 3 4 2 
1 4 2 3 
1 4 3 2 
2 1 3 4 
2 1 4 3 
2 3 1 4 
2 3 4 1 
2 4 1 3 
2 4 3 1 
3 1 2 4 
3 1 4 2 
3 2 1 4 
3 2 4 1 
3 4 1 2 
3 4 2 1 
4 1 2 3 
4 1 3 2 
4 2 1 3 
4 2 3 1 
4 3 1 2 
4 3 2 1 

示例 4

让我们看一个简单的例子

输出

231 312 321