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 }