stl 全排列函数 next_permutation

做题时,遇到了,记录一下

一、基础概念

next_permutation需要头文件<algorithm>

next_permutation的时间复杂度是O(n)

next_permutation可以有两个或三个参数,类似于sort函数

 

next_permutation函数

返回值:如果没有下一个排列组合,返回false,否则返+回true。

 

注意,如果想获得所有的排列组合,那么我们的数据初始排列应该是升序的

二、实验

实验1

#include <iostream> #include <algorithm> #include <vector> using namespace std; vector<int> ve; int main(){ ve.push_back(10); ve.push_back(20); ve.push_back(30); do { cout<<ve[0]<<"\t"<<ve[1]<<"\t"<<ve[2]<<endl; }while(next_permutation(ve.begin() , ve.end() ) ); return 0; }

 

 

全的全排列 

 

再看非升序实验

实验2

#include <iostream> #include <algorithm> #include <vector> using namespace std; vector<int> ve; int main(){ ve.push_back(30); ve.push_back(10); ve.push_back(20); do { cout<<ve[0]<<"\t"<<ve[1]<<"\t"<<ve[2]<<endl; }while(next_permutation(ve.begin() , ve.end() ) ); return 0; }

 

 只有两例

 

实验3

简单的实现了一下3个参数的next_permutation函数

#include <iostream> #include <algorithm> using namespace std; typedef struct _TEST { int num; string name; } TEST,pTEST; int main(){ TEST test[3]; test[0] = {1,"刘备"}; test[1] = {2,"关羽"}; test[2] = {3,"张飞"}; do { cout<<test[0].name<<"\t"<<test[1].name<<"\t"<<test[2].name<<endl; cout<<test[0].num<<"\t"<<test[1].num<<"\t"<<test[2].num<<endl; }while(next_permutation(test,test+3,[=](const TEST &a,const TEST &b){ return a.num > b.num; })); return 0; }

 


__EOF__

本文作者_TLSN
本文链接https://www.cnblogs.com/lordtianqiyi/articles/16112544.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   TLSN  阅读(188)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示