• STL_算法_依据第n个元素排序(nth_element)


    C++ Primer 学习中。。。

     

    简单记录下我的学习过程 (代码为主)


    //全部容器适用
    nth_element(b,n,e)
    nth_element(b,n,e,p)
    对照:partition()算法


    /**------http://blog.csdn.net/u010579068------**/
    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<vector>
    #include<list>
    #include<functional>
    #include<deque>
    #include<algorithm>
    using namespace std;
    
    /*****************************************
    //全部容器适用
    nth_element(b,n,e)
    nth_element(b,n,e,p)
    对照:partition()算法
    *****************************************/
    /**----------------------------------------------------------------------------------
    
    ----------------------------------------------------------------------------------**/
    /*************************************************************************************
    std::nth_element                    全部排序容器适用                        algorithm
    --------------------------------------------------------------------------------------
    template <class RandomAccessIterator>
      void nth_element ( RandomAccessIterator first, RandomAccessIterator nth,
                         RandomAccessIterator last );
    
    template <class RandomAccessIterator, class Compare>
      void nth_element ( RandomAccessIterator first, RandomAccessIterator nth,
                         RandomAccessIterator last, Compare comp );
    //eg:
    
    *************************************************************************************/
    
    
    bool myfunction (int i,int j)
    {
        return (i>j);
    }
    
    int main ()
    {
        int m[]= {3,4,5,6,7,2,3,4,5,6,1,2,3,4,5};
        vector<int> myvector(m,m+15);
        vector<int>::iterator it;
    
    //  set some values:
    //    for (int i=1; i<10; i++) myvector.push_back(i);   // 1 2 3 4 5 6 7 8 9
    
    //    random_shuffle (myvector.begin(), myvector.end());
    
        cout << "myvector contains:(原始数据)";
        for (it=myvector.begin(); it!=myvector.end(); ++it)
            cout << " " << *it;
    
        cout << endl;
    //   using default comparison (operator <):
    //   cout<<*(myvector.begin()+3)<<endl;
        nth_element (myvector.begin(), myvector.begin()+3, myvector.end());
    
        cout << "myvector contains:(从小到大)";
        for (it=myvector.begin(); it!=myvector.end(); ++it)
            cout << " " << *it;
    
        cout << endl;
    
    //  using function as comp
    //    cout<<*(myvector.end()-4)<<endl;
    //    nth_element (myvector.begin(), myvector.begin()+3, myvector.end(),myfunction);
        nth_element (myvector.begin(), myvector.end()-4, myvector.end(),greater<int>());
        // print out content:
        cout << "myvector contains:(从大到小)";
        for (it=myvector.begin(); it!=myvector.end(); ++it)
            cout << " " << *it;
    
        cout << endl;
    
        return 0;
    }
    


  • 相关阅读:
    次小生成树
    乘法逆元(递推)
    乘法逆元(快速幂)
    带偏移量的并查集
    Tarjan 强连通分量
    Luogu_P2461 [SDOI2008]递归数列 【题解】 矩阵乘法
    Luogu_P2243 电路维修【题解】 双端队列bfs
    Luogu_ P2962 [USACO09NOV] 灯 【题解】 双向搜索
    luogu_P2044【题解】 随机数生成器 矩阵乘法
    luogu_P2054 bzoj 1965 洗牌 【题解】 快速幂 快速乘
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7088389.html
Copyright © 2020-2023  润新知