C++函数库——全排列

全排列,顾名思义,对一个无序数组或者有序数组写出其对应的所有组合,实则为从当前数组顺序开始,
排列出所有比当前序列大(默认)或者小的所有组合,所以如果初始为无序数组,则得到的结果并非所有组合
1.next_permutation,获取下一个排列结果,及获取比当前序列小的下一个序列
 1 #include <iostream>
 2 #include <algorithm>//使用 next_permutation()和sort()需要导入的头文件 
 3 using namespace std;
 4 
 5 int main() {
 6     int a[4] = {2, 1, 4, 3};
 7 
 8 //    sort(a, a + 4);
 9 
10     do {
11         for (int i = 0; i < 4; i++) {
12             cout << a[i] << ' ';
13         }
14         cout << endl;
15     } while (next_permutation(a, a + 4));
16 }
 
2.prev_permutation,获取上一个排列,及获取比当前序列大的第一个序列
1
#include <iostream> 2 #include <algorithm> 3 #include<bits/stdc++.h> 4 using namespace std; 5 6 int cmp(int x, int y) { 7 return x > y; 8 } 9 10 int main() { 11 int a[4] = {2, 1, 4, 3}; 12 13 sort(a, a + 4, cmp); 14 15 do { 16 for (int i = 0; i < 4; i++) { 17 cout << a[i] << ' '; 18 } 19 cout << endl; 20 } while (prev_permutation(a, a + 4)); 21 }

3.结构体,或vector的相关排列

结构体和sort中的cmp一样的使用方法,其中vector需要注意的是应当使用begin()和end()以及其他相关的用来切割数据域的方法

vector<int> v;
    next_permutation(v.begin(),v.end());

结构体:

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 
 5 struct pp{
 6     int a;
 7 }; 
 8 
 9 bool cmp(pp t1,pp t2){ 
10     return t1.a<t2.a;
11 }
12 
13 int main(){
14     pp s[4];
15     s[0].a=1;
16     s[1].a=2;
17     s[2].a=3;
18     s[3].a=4;
19     
20     do{
21         for(int i=0;i<4;i++){
22             cout<<s[i].a<<' ';
23         }
24         cout<<endl;
25     }while(next_permutation(t,t+4,cmp));
26 } 

 

posted on 2023-04-05 18:55  云の海  阅读(98)  评论(0编辑  收藏  举报

导航