STL 中的 prev_permutation() 算法用于生成一个序列的重排列,它是所有可能的字典序中的下一个排列,默认使用 > 运算符来做这些事情。
它的参数为定义序列的迭代器和一个返回布尔值的函数,这个函数在下一个排列小于上一个排列时返回 true,如果上一个排列是序列中最小的,它返回 false,所以会生成字典序最大的排列。
#include <algorithm>
template <class BidirectionalIterator>
bool prev_permutation(BidirectionalIterator first,
BidirectionalIterator last );
template <class BidirectionalIterator, class Compare>
bool prev_permutation (BidirectionalIterator first,
BidirectionalIterator last, Compare comp);
参数 | 描述 |
---|---|
first | 输入迭代器 |
last | 输入迭代器 |
comp | 自定义比较规则 |
使用 STL prev_permutation 函数对集合全排列
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
std::cout << "嗨客网(www.haicoder.net)\n" << std::endl;
int a[4] = {1, 2, 3, 4};
sort(a,a+4);
do{
for(int i = 0;i < 4;i++)
{
cout << a[i] << " ";
}
cout<<endl;
}while(prev_permutation(a, a+4));
}
我们在 Linux 下使用 g++ 进行编译,具体命令如下:
g++ prev_permutation.cpp -std=c++11
编译后,我们直接运行生成的二进制文件 a.out
,如下图所示:
我们使用了 prev_permutation 函数,对集合全排列。
STL 中的 prev_permutation() 算法用于生成一个序列的重排列,它是所有可能的字典序中的下一个排列,默认使用 > 运算符来做这些事情。
它的参数为定义序列的迭代器和一个返回布尔值的函数,这个函数在下一个排列小于上一个排列时返回 true,如果上一个排列是序列中最小的,它返回 false,所以会生成字典序最大的排列。