zoukankan      html  css  js  c++  java
  • 集装箱set相关算法

    
    1. set_union

      算法set_union可构造S1S2的并集。此集合内含S1S2内的每个元素。

      S1S2及其并集都是以排序区间表示。返回值是一个迭代器。指向输出区间的尾端。

      因为S1S2内的每一个元素都不需唯一,因此,假设某个值在S1出现n次。在S2出现m次,那么该值再输出区间中会出现max(m,n)次,当中n个来自S1,其余来自S2。在STL set容器内。m小于等于1n小于等于1

      template <class InputIterator1,classInputIterator2,class OutputIterator>

      OutputIterator set_union(InputIterator1first1,InputIterator1 last1,

                                                InputIterator2 first2,InputIterator2 last2,

                                                OutputIterator result)

      {

             while(first1 != last1 && first2 != last2)

             {

                    if(*first1 < *first2)

                    {

                          *result= *first1;

                          ++first1;

                    }

                    elseif (*first2 < *first1)

                    {

                          *result= *first2;

                          ++first2;

                    }

                    else

                    {

                          *result= *first1;

                          ++first1;

                          ++first2;

                    }

                    ++result;

             }

      return copy(first2,last2,copy(first1,last1,result));

      }

    2. set_intersection

      算法set_intersection可构造S1S2的交集。此集合内含同一时候出现于S1S2内的每个元素。S1S2及其交集都是以排序区间表示。返回值为一个迭代器。指向输出区间的尾端。

      因为S1S2内的每一个元素都不需唯一。因此。假设某个值在S1出现n次,在S2出现m次,那么该值再输出区间中出现min(m,n)次,而且所有来自S1。在STL set容器内,m小于等于1n小于等于1

      template <class InputIterator1,classInputIterator2,class OutputIterator>

      OutputIteratorset_intersection(InputIterator1 first1,InputIterator1 last1,

                                                InputIterator2 first2,InputIterator2 last2,

                                                OutputIterator result)

      {

             while(first1 != last1 && first2 != last2)

             {

                    if(*first1 < *first2)

                    {

                          //*result= *first1;

                          ++first1;

                    }

                    elseif (*first2 < *first1)

                    {

                          //*result= *first2;

                          ++first2;

                    }

                    else

                    {

                          *result= *first1;

                          ++first1;

                          ++first2;

                          ++result;

                    }

                    //++result;

             }

             //return copy(first2,last2,copy(first1,last1,result));

      }

    3. set_difference

      算法set_difference可构造S1S2的差集。此集合内含“出现于S1但不出现于S2”的每个元素。S1S2及其差集都是以排序区间表示。返回值为一个迭代器,指向输出区间的尾端。

      因为S1S2内的每一个元素都不需唯一,因此假设某个值再S1出现n次,在S2出现m次。那么该值再输出区间中出现max(n-m,0)次,而且所有来自S1。在STL set容器内。m小于等于1n小于等于1

      template <class InputIterator1,classInputIterator2,class OutputIterator>

      OutputIteratorset_difference(InputIterator1 first1,InputIterator1 last1,

                                                InputIterator2 first2,InputIterator2 last2,

                                                OutputIterator result)

      {

             while(first1 != last1 && first2 != last2)

             {

                    if(*first1 < *first2)

                    {

                          *result= *first1;

                          ++first1;

                          ++result;

                    }

                    elseif (*first2 < *first1)

                    {

                          //*result= *first2;

                          ++first2;

                    }

                    else

                    {

                          //*result= *first1;

                          ++first1;

                          ++first2;

                          //++result;

                    }

                    //++result;

             }

             //return copy(first2,last2,copy(first1,last1,result));

             return copy(first1,last2,result);

      }

    4. set_symmetric_difference

      算法set_symmetric_difference可构造S1S2的对称差集。此集合内含“出现于S1但不出现于S2”以及“出现于S2但不出现于S1”的每个元素。S1S2及其差集都是以排序区间表示。返回值为一个迭代器,指向输出区间的尾端。

      因为S1S2内的每一个元素都不需唯一。因此假设某个值在S1出现n次,在S2出现m次,那么该值再输出区间中出现|m-n|次。

      假设n>m。输出区间内的最后n-m个元素将由S1复制而来,假设n<m则输出区间内的最后m-n个元素将由S2复制而来。在STL set容器内,m小于等于1n小于等于1

      template <class InputIterator1,classInputIterator2,class OutputIterator>

      OutputIteratorset_symmetric_difference(InputIterator1 first1,InputIterator1 last1,

                                                InputIterator2 first2,InputIterator2 last2,

                                                OutputIterator result)

      {

             while(first1 != last1 && first2 != last2)

             {

                    if(*first1 < *first2)

                    {

                          *result= *first1;

                          ++first1;

                          ++result;

                    }

                    elseif (*first2 < *first1)

                    {

                          *result= *first2;

                          ++first2;

                          ++result;

                    }

                    else

                    {

                          //*result= *first1;

                          ++first1;

                          ++first2;

                          //++result;

                    }

                    //++result;

             }

             return copy(first2,last2,copy(first1,last1,result));

             //return copy(first1,last2,result);

      }

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    解决:fontawesome-webfont.woff2?v=4.6.3 404 (Not Found)
    Leetcode练习(Python):树类:第116题:填充每个节点的下一个右侧节点指针:给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。
    Leetcode练习(Python):树类:第114题:二叉树展开为链表:给定一个二叉树,原地将它展开为一个单链表。
    Leetcode练习(Python):树类:第113题: 路径总和 II:给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。
    Leetcode练习(Python):树类:求根到叶子节点数字之和:给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。 例如,从根到叶子节点路径 1->2->3 代表数字 123。 计算从根到叶子节点生成的所有数字之和。 说明: 叶子节点是指没有子节点的节点。
    Leetcode练习(Python):树类:第199题:二叉树的右视图:给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
    大数据可视化案例二:数据可视化地图
    大数据可视化案例一:词云
    大数据获取案例:Python网络爬虫实例
    Leetcode练习(Python):树类:第236题:二叉树的最近公共祖先:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4887986.html
Copyright © 2011-2022 走看看