当前位置: 代码迷 >> 综合 >> sort priority_queue set map —— 自定义比较函数的异同
  详细解决方案

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

热度:37   发布时间:2023-12-06 04:56:28.0

//默认都为 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

  相关解决方案