比较函数大小

Posted angelliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比较函数大小相关的知识,希望对你有一定的参考价值。

结构体内嵌比较函数:

 

sort( a, a+ n, cmp) 比较慢,排序有可能就TLE了

故用

 

结构体内嵌比较函数:
Bool oprator < (const node &x) const{}
排序的时候,没有参数的l,r比有参数的x.l,x.r的级别高,就相当于是比较的时候的第一个数

 

一个变量排序

struct node
{
    int l,r;
    bool operator <(const node &a)const{
        return r < a.r;
    }
}a[maxn];

直接写比较函数是裸的r表示当前的值,如果r<a.r,那么就是从小到大排序,但是优先队列的是相反的。

sort默认为从小到大排序,优先队列默认为从大到小

struct node
{
    int l,r;
    bool operator <(const node &a)const
    {
        return r>a.r;
    }
};
priority_queue<node> q;

那么这个优先队列是按r小的优先出队

结构体内嵌比较函数的使用就是直接sort就可以,sort(a,a+n);

当然也可以直接写一个比较的函数:用法就是sort(a,a+n,cmp);

bool cmp(node a,node b){

  return a.r<b.r;
 }

两个变量排序

#include<bits/stdc++.h>
using namespace std;
#define forn(i,n) for(int i=0;i<n;i++)
struct node{ int l,r; bool operator < (const node &x) const { if(l<=r&&x.l> x.r) return true; if(l> r&&x.l< x.r) return false; if(l<=r&&x.l<=x.r) return l<x.l; if(l> r&&x.l> x.r) return r>x.r; //return false; } }a[100]; int main() { int n; scanf("%d",&n); forn(i,n) scanf("%d%d",&a[i].l,&a[i].r); sort(a,a+n); forn(i,n) cout<<a[i].l<<" "<<a[i].r<<endl; }
技术图片

(1,3) (5,6) (4,3) (8,2) (7,1) 

蓝色的都是l<=r的,粉色的都是l>r的,排序的时候,没有参数的l,r比有参数的x.l,x.r的级别高,就相当于是比较的时候的第一个数

当我比较的两个数,一个是l<=r的,另一个是l>r的,按照没有参数的为主,看返回的是true还是false。

如果为if(l<=r&&x.l> x.r) return true;

   if(l> r&&x.l<=x.r) return false;    那么l<=r的数都在l>r的数的前面

if(l<=r&&x.l<=x.r) return l<x.l;

       if(l>  r&&x.l>  x.r) return r>x.r;

那么对于l<=r的数而言,谁的l更小谁在前面,对于l>r的而言,谁的r更大谁在前面

 

以上是关于比较函数大小的主要内容,如果未能解决你的问题,请参考以下文章

比较有用的php代码片段

13 个非常有用的 Python 代码片段

java怎么比较两个日期(年和月)的大小

Malloc 函数可以申请任意大小的堆区内存,如果 malloc(0) 会怎么样啊?这个代码好像也没有报错。

分享几个实用的代码片段(第二弹)

分享几个实用的代码片段(第二弹)