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

来源:互联网 发布:大型网络3d游戏 编辑:程序博客网 时间:2024/06/12 22:27

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;}


0 0