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