sort priority_queue set map —— 自定义比较函数的异同

//

默认都为 less<T>

01 sort 从小到大            // less<T>()
02 priority_queue 从大到小  // less<T>
03 set 从小到大             // less<T>
04 map 从小到大             // less<T>

仿函数
    类重载了operator() 创建一个行为类似函数的对象 可实现类似函数调用的过程

// sort 
#include<bits/stdc++.h>
using namespace std;
									// c++高版本标准实现列表初始化 
vector<int> v1{ 1,20,3,40,5,60,7,80,9,10 };
vector<int> v2{ 11,2,33,4,55,6,77,8,99,1 };
vector<int> v3{ 1,22,3,44,5,66,7,88,9,10 };
vector<int> v4{ 1,23,3,45,5,67,7,89,9,10 };
vector<int> v5{ 1,13,3,15,5,17,7,19,9,11 };

// 01 自定义比较函数
bool cmpF( const int& a,const int& b ) { return a < b ; }
// 02 自定义比较类 仿函数
struct cmpS
{
    bool operator () ( const int& a,const int& b ) const
    {
        return a < b ;
    }
};

void out( const vector<int>& v )
{
    for( int i=0;i<v.size();i++ )
    {
        if(i) cout<<" ";
        cout<<v[i];
    }
    cout<<endl;
}
 
int main()
{
    sort( v1.begin(),v1.end(),cmpF );             out( v1 );    // 函数不带()
    sort( v2.begin(),v2.end() );                  out( v2 );    // 默认为 less<T>()
    sort( v3.begin(),v3.end(),less<int>() );      out( v3 );
    sort( v4.begin(),v4.end(),greater<int>() );   out( v4 );
    sort( v5.begin(),v5.end(),cmpS() );           out( v5 );    // 仿函数都带()
    
    return 0;
}
// 1 3 5 7 9 10 20 40 60 80
// 1 2 4 6 8 11 33 55 77 99
// 1 3 5 7 9 10 22 44 66 88
// 89 67 45 23 10 9 7 5 3 1
// 1 3 5 7 9 11 13 15 17 19

// priority_queue
#include<bits/stdc++.h>
using namespace std;

struct AA
{
    int x,y;
    AA ( int a=0,int b=0 ):x(a),y(b) {}
    friend operator < ( const AA& a,const AA& b ) 
    {
        return ( b.x < a.x ) ;
    }
}in;

struct cmp	// not ()
{
    bool operator () ( const int& a,const int& b ) const
    {
        return ( b < a ) ;
    }
};

int main()
{
    priority_queue<AA> q1;                    // not ()
    priority_queue< int,vector<int>,greater<int> > q2;
    priority_queue< int,vector<int>,cmp > q3;
    return 0;
}

// set
#include<bits/stdc++.h>
using namespace std;

struct cmp
{
    bool operator () ( const int& a,const int& b ) const
    {
        return ( a > b ) ;  // 从大到小
    }
};

int main()
{
    set<int,cmp> st;
    set<int,cmp>::iterator it;
	int n,i;
	
    while( cin>>n )
    {
        st.clear();
        for( i=0;i<n;i++ ) st.insert( i );

        for( it=st.begin();it!=st.end();it++ )
        {
            cout<<(*it)<<" ";
        } 
        cout<<endl;
    }
    return 0;
}
// 4
// 3 2 1 0
// 3
// 2 1 0
// 2
// 1 0
// 1
// 0

// map
#include<bits/stdc++.h>
using namespace std;

struct cmp
{
    bool operator () ( const int& a,const int& b ) const
    {
        return ( a > b ) ;	// 从大到小 
    }
};

int main()
{
    map< int,int,cmp > mp;
    map< int,int,cmp >::iterator it;
    int n,i;

    while( cin>>n )
    {
        mp.clear();
        for( i=0;i<n;i++ )
        {
            mp.insert( make_pair( i,i-n ) );
        }
        for( it=mp.begin();it!=mp.end();it++ )
        {
            cout<<it->first<<" "<<it->second<<endl;
        }
    }
    return 0;
}
// 5
// 4 -1
// 3 -2
// 2 -3
// 1 -4
// 0 -5

猜你喜欢

转载自blog.csdn.net/qq_63173957/article/details/124121961