问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C++库函数详解:next_permutation的使用方法

创作时间:
作者:
@小白创作中心

C++库函数详解:next_permutation的使用方法

引用
CSDN
1.
https://m.blog.csdn.net/m0_75266675/article/details/140232638

next_permutation是C++标准库中的一个非常实用的函数,主要用于生成序列的下一个排列。本文将详细介绍该函数的使用方法,包括普通数组、容器以及结构体的排列生成,并通过具体的代码示例帮助读者理解其工作原理。

函数简介

next_permutation函数用于生成某个序列的下一个排列。它通常在需要生成排列的问题中使用,比如全排列问题。

使用方法

  • 普通序列next_permutation(起始地址,末尾地址+1)
  • 结构体next_permutation(起始地址,末尾地址+1,自定义排列)

例子

对于普通数组

int main()
{
    int a[4] = { 1,2,3,4 };
    do {
        for (auto i : a)
        {
            cout << i << " ";
        }
        cout << endl;
    } while (next_permutation(a, a + 4));
    return 0;
}

输出结果:

1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1

对于vector等容器

int main()
{
    vector<int>v{ 1,2,3,4 };
    do {
        for (auto i : v)
        {
            cout << i << " ";
        }
        cout << endl;
    } while (next_permutation(v.begin(), v.end()));
    return 0;
}

输出结果:

1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1

对于结构体

需要自定义比较函数:

struct test {
    int val;
};
bool cmp(test t1, test t2) {
    return t1.val < t2.val;
}
int main() {
    test t[3];    
    t[0].val = 1;    
    t[1].val = 2;    
    t[2].val = 3;    
    do {
        for (int i = 0;i < 3;i++) {//打印排列     
            cout << t[i].val << ' ';    
        }
        cout << endl;    
    } while (next_permutation(t, t + 3, cmp));//获取下一个排列     
}

输出结果:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

本篇完!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号