在struct和外部写的比较函数
1.sort中的比较函数
(1)用cmp比较函数实现(注意这里一般是用struct,因为struct对外默认是public,而class默认对外是private)
bool cmp(const any& a,const any& b)//任何一种数据类型都可
{
return a > b;//a是在排序中左边那个数,b是在排序中右侧的那个数,若any中有多个数,则可访问特定的某一个数
}
any a[n];
sort(a,a + n,cmp)//升序
(2)在数据类型中进行重载 < //因为sort函数中是通过<来判断的,因此只能重载<,不可重载>
struct any
{
int one;
int two;
bool operator < (const any&n)const
//注意这里需要加一个const,否则会报错,因为要传入的n是一个const类型的,因此这个内置函数也一定要是const类型的,才可以保证传入的值不会被改变
{
return one > n.one;//降序
}
}m[N];
sort(m,m + N);
2.在stl中的仿函数(也是重载操作符得以实现的)
以set为例
set中插入的元素自动排序成升序的顺序,那如果要改变set中的排序规律,我们则需要定义一个类或者struct来作为仿函数
(1)在外部定义(当set中的数据类型是基本数据类型的时候)
struct Cmp
{
bool operator()(const int& a,const int& b)const
{
return a > b;
}
};
set<int,Cmp>s;//是一种基本数据类型时,降序
s.insert(1);
s.insert(2);
s.insert(0);
s.insert(6);
(2)在数据类型的内部定义(当set中的数据类型是自定义数据类型的时候)
struct any
{
int one;
bool operator() (const any& n)const
{
return one > n.one;
}
};
set<any>s;
any e = {2};
any d = {4};
any f = {1};
s.insert(e);
s.insert(d);
s.insert(f);//降序