GuguMelon's Blog

今天所做之事勿候明天,自己所做之事勿候他人。

0%

C++全排列函数

主角

C++中的全排列函数很是强大,生成一个长度为$n$的序列的全排列复杂度仅为$O(n)$。

今天总结一下用法。

默认$cmp$规则

对一个数据有序容器$s$,如下代码便可实现全排列。

为什么必须是有序呢?如果不是有序,$next_permutation$函数便只能生成有序条件下该序列之后的排列。

1
2
3
do{

}while(s.begin(),s.end());

自定义$cmp$规则

那么,如果容器内数据的排序规则和正常的排序规则不太一样呢?

不要慌,我们可以自定义排序规则,手写$cmp$。

举个栗子。

1
2
3
4
5
6
7
int cmp(char a,char b) 
{
if(tolower(a)!=tolower(b))//tolower 是将大写字母转化为小写字母.
return tolower(a)<tolower(b);
else
return a<b;
}//自定义字符比较规则

那么在使用$next_permutation$函数的时候,如下方式实现。

1
2
3
4
do
{

}while(next_permutation(ch,ch+strlen(ch),cmp));