zoukankan      html  css  js  c++  java
  • 泛型算法(二十三)之排列算法

    1、is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2):C11版本,判断两个序列是否为同一元素集的两个排列。

        std::vector<int> c1 = {1, 2, 3, };
        std::vector<int> c2 = {1, 2, 3, 1, 3};
        //判断两个序列是否为同一元素集的两个排序
        bool i = std::is_permutation(c1.begin(), c1.end(), c2.begin());
    
        std::cout << (int)i;
        //打印结果:1

    2、is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, BinaryPredicate pred):C11版本,重载版本。

    自己实现pred,向算法定制操作。

    3、next_permutation(BidirectionalIterator first, BidirectionalIterator last):n个元素有n!种排列。这些排列中,规定升序序列为最小排列,降序序列为最大的排列,任意两个排列按照字典序分出大小。该函数返回当前序列作为一个排列按字典序的下一个排列。

        std::vector<int> c = {1, 2, 3, 4, 5};
        
        std::next_permutation(c.begin(), c.end());
        
        for (auto var : c)
        {
            std::cout << var << ",";
        }
        //打印结果:1,2,3,5,4,

    4、next_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp):重载版本。

    自己实现comp,向算法定制操作。

    5、prev_permutation(BidirectionalIterator first, BidirectionalIterator last):返回当前序列作为一个排列按字典序的上一个排列。

        std::vector<int> c = {1, 2, 3, 4, 5};
        
        std::prev_permutation(c.begin(), c.end());
        
        for (auto var : c)
        {
            std::cout << var << ",";
        }
        //打印结果:5,4,3,2,1,

    6、prev_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp):重载版本。

    自己实现comp,向算法定制操作。

  • 相关阅读:
    Linux 环境下搭建单机版 Redis
    为什么要同时重写equals和hashcode方法
    使用ThreadPoolExecutor 创建线程池,完成并行操作
    一个简单的通过newFixedThreadPool实现多线程案例
    Java 获取对象的所有属性及其对应的值
    分布式id生成方案总结
    使用idea和gradle编译spring5源码
    Pandas中常用的函数使用
    单链表的反转 python实现实例
    kaggle注册中的坑---2018,12.3试过有效
  • 原文地址:https://www.cnblogs.com/dongerlei/p/5147591.html
Copyright © 2011-2022 走看看