结构体排序 or pair排序 ?

pair排序

//声明
pair<int,int>p[10005];

//创建pair变量
p[i]={x,y};

//引用pair中的元素
p[i].first
p[i].second

//排序
sort(p+1,p+n+1);
//会自动按pair中的first升序排序,当first值相同时按second升序排序
//等价于
bool cmp(pair<int,int>a,pair<int,int>b){
    if(a.first==b.first) return a.second<b.second;
    return a.first<b.first;
}

 

结构体排序

//声明结构体类型及定义变量
struct node{
    int x;
    int y;
}a[10005];

//引用结构体内的元素
a[i].x
a[i].y

//元素排序
//1 cmp函数
bool cmp(node &a,node &b){
    if(a.x==b.x) return a.y<b.y;    //如果不这样写,有可能第二维数据不是有序的,因此和用pair排序的结果不一样
    return a.x<b.x;
}

sort(a+1,a+n+1,cmp);
    
//2 重载小于号
struct node{
    int x;
    int y;
    bool operator < (const node &b) const{
         if(x==b.x) return y<b.y;    //如果不这样写,有可能第二维数据不是有序的,因此和用pair排序的结果不一样
         return x<b.x;
    }
}a[10005];

sort(a+1,a+n+1);

 

时间复杂度

都是O(nlogn)

上一篇:9年经验,总结SEO职业瓶颈


下一篇:C语言-字符串函数