首页 > 编程语言 >C++函数库——全排列

C++函数库——全排列

时间:2023-04-05 19:00:11浏览次数:39  
标签:sort 排列 函数库 int C++ permutation include cmp

全排列,顾名思义,对一个无序数组或者有序数组写出其对应的所有组合,实则为从当前数组顺序开始,
排列出所有比当前序列大(默认)或者小的所有组合,所以如果初始为无序数组,则得到的结果并非所有组合
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 } 

 

标签:sort,排列,函数库,int,C++,permutation,include,cmp
From: https://www.cnblogs.com/laocaigoul/p/17290471.html

相关文章

  • c++ std::variant
    std::variant是c++17引入的一个类型,其作用类似于C语言中的Union,但是比Union的功能强大的多。C语言中一个联合体Union可以储存多种类型数据,但缺点有很多。比如:1没有可用的方法来判断Union中真实储存的类型,获取值时也是内存拷贝的结果,可能会存在问题。这就只能靠程序员人脑保证......
  • 2.Visual studio的使用和C++的基础
    visualstudio的基础介绍C++入门编程C++关键字、标识符C++基本数据类型变量的定义visualstudio的基础介绍解决方案资源管理器 也可以在”视图”中找到”解决方案资源管理器” “.h”:头文件;“.cpp”:源文件添加新建项,选择C++语言  运行程序,或"ctrl+F5“ ......
  • C++中的左值和右值
    左值与右值左值和右值有如下3个规则:左值和右值都是表达式。左值是对象定位器,理论上左值指示指示一个对象。右值是一个临时值,其他位置无法访问这个值,通常情况下在语句执行完成后右值就被丢弃。http://c.biancheng.net/view/281.html左值:可以进行取地址的称为左值。右值:不......
  • C++复习-第一天
    C++支持完全面向对象的程序设计,包括面向对象开发的四大特性:封装;抽象;继承;多态。C++封装 C++抽象 C++继承 C++多态多态的实现方式分为三块:重载,重写,重定义。1.重载是指在同一作用域下,具有相同函数名称不同的参数类型,或不同的参数个数,或不同的返回类型。2.重写是指在......
  • C++库封装JNI接口——实现java调用c++
    1.JNI原理概述通常为了更加灵活高效地实现计算逻辑,我们一般使用C/C++实现,编译为动态库,并为其设置C接口和C++接口。用C++实现的一个库其实是一个或多个类的简单编译链接产物。然后暴露其实现类构造方法和纯虚接口类。这样就可以通过多态调用到库内部的实现类及其成员方法。进一步......
  • 关于我用ai做了一点c++开发这件事
    简介C++一直不是我的主力编程语言,何况众所周知C++学习曲线之陡峭,尽管如此我还是动了挑战一下用ai写一下c++程序的念头,事实证明ai非常高效的帮助我完成了我的目标,在大概7个小时的工作时间里帮助我写完了一个简单的汇编器,我目前主要使用newbing作为ai助手,我们的完整QA如下:QA过程......
  • UE5 修复 C++ 代码里的中文在蓝图中显示为乱码的问题
    1.打开VS2019,依次点击扩展->管理扩展,搜索“UTF8”,安装后源码文件会强制保存为UTF-8。注:可能需要重新保存一下,但是只要保存文件的动作生效就会自动检测-转换编码。 2.使用示例    ......
  • Win7的64系统电脑桌面图标无法随意排列的解决方法
    Win7系统电脑桌面图标不能随意摆放怎么办?电脑桌面图标无法随便排列位置该如何解决?请看下文具体介绍。解决方法:1、系统偶然出现状况,重新启动一下计算机看看;2、确定一下没有启用“自动排列”和“对齐到网络”功能,方法是鼠标在桌面空白处右击,然后点击选择“查看”,检查......
  • c++实现Matlab矩阵Matrix类(实矩阵Matrix、复矩阵CMatrix)
    全栈工程师开发手册(作者:栾鹏)matlab2c动态链接库下载matlab库函数大全matlab2c基础教程matlab2c开发全解教程开发注意事项:1、目前matlab2c对矩阵的实现仅包含实数型、复数型数据。实数型矩阵使用Matrix定义,复数型矩阵使用CMatrix定义。2、实数矩阵元素int、float元素类型会自动......
  • 8-1 【Python0001】列举说明Python同Java及C++的不同之处
    首先是C++C++是在C语言的基础上发展起来的,他包含了C语言的所有内容。同时,也引入了面向对象的概念。优点:1、他包含了C语言的内容,包括指针,使得C++在执行效率上特别的高效。2、引入面向对象的概念,使得开发效率提高。3、提供了很多的库,具有较好的封装性和移植性(代码)。缺点:1、C++比较难......