zoukankan      html  css  js  c++  java
  • 合并两个sorted ranges(merge和inplace_merge)

    merge

    //版本一:用operator <比较元素 
    template <class InputerIterator1,class InputerIterator2,class OutputIterator>
    OutputIterator merge(InputerIterator1 first1,InputerIterator1 last1,
                         InputerIterator2 first2,InputerIterator2 last2,
                         OutputIterator result);
                         
    //版本二:用自定义的function object比较元素 
    template <class InputerIterator1,class InputerIterator2,class OutputIterator,class StrictWeakOrdering>
    OutputIterator merge(InputerIterator1 first1,InputerIterator1 last1,
                         InputerIterator2 first2,InputerIterator2 last2,
                         OutputIterator result,StrictWeakOrdering cmp);
    1. 把两个已排序的ranges合并成单一的一个range,若两个input range有等价(相同)的元素,第一个range的排在第二个range的之前,稳定的,元素相对位置不改变 
    2. [first1,last1)和[result,result+(last1-first1)+(last2-first2))不重叠 ,合并后的长度等于两个range长度之和
    3. [first2,last2)和[result,result+(last1-first1)+(last2-first2))不重叠

    inplace_merge

    //版本一:用operator <比较元素 
    template <class BidirectionalIterator>
    inline void inplace_merge(BidirectionalIterator first,BidirectionalIterator middle,BidirectionalIterator last);
    
    //版本二:用自定义的function object比较元素 
    template <class BidirectionalIterator,class StrictWeakOrdering>
    inline void inplace_merge(BidirectionalIterator first,BidirectionalIterator middle,BidirectionalIterator last,StrictWeakOrdering cmp);

      把两段已连接的分别排序的合成一个排序的range,两段递增的range合并成一个递增的range,range中的相对元素也不会改变,此算法会分配临时内存缓冲区,运行速度取决于多少内存可用

    #include <iostream>
    #include <vector>
    #include <iterator>
    #include <algorithm>
    using namespace std;
    
    int main()
    {
        vector<int> v{1,3,5,7,9};
        vector<int> v1{2,4,6,8,8,10};
        merge(v.begin(),v.end(),v1.begin(),v1.end(),ostream_iterator<int>(cout," "));
        cout<<endl;
        
        vector<int> v2{10,16,19,3,6,9};
        inplace_merge(v2.begin(),v2.begin()+3,v2.end());
        for_each(v2.begin(),v2.end(),[](int i)
        {
            cout<<i<<" ";
        });
        cout<<endl;
        return 0;
    }
  • 相关阅读:
    HTML学习(4)属性
    HTML学习(3)基础
    HTML学习(2)编辑器
    HTML学习(1)简介
    winform学习(10)设置控件透明背景色
    winform学习(9)无边框拖动窗体
    《分布式机器学习:算法、理论与实践》——【RE5】
    《分布式机器学习:算法、理论与实践》——【RE4】
    《机器学习在搜索广告中的机遇和挑战》
    >>《learning to rank(ltr)
  • 原文地址:https://www.cnblogs.com/tianzeng/p/10392232.html
Copyright © 2011-2022 走看看