我是靠谱客的博主 粗暴书本,最近开发中收集的这篇文章主要介绍【C/C++】结构体内重载(优先队列或sort()函数对结构体里的元素进行结构体排序),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

结构体内重载定义

【代码模板】

struct node{
int u, v;
friend bool operator < (node a , node b){
if(a.u == b.u) return a.v > b.v;
return a.u > b.u;
//优先队列中的排序大小与结构体里重载的符号相反
//sort()函数中的排序大小与结构体里重载的符号一致
}
};

【注意】 return中的 “>” 和 “<” 符号
优先队列中的排序大小与结构体里重载的符号相反
sort()函数中的排序大小与结构体里重载的符号一致


【声明方式】

优先队列: priority_queue<node> que;
添加或删除n项,一次一个,时间复杂度为nlog(n)

sort()函数 头文件#include <algorithm>
时间复杂度:nlog(n)


【使用方法】

优先队列:

注意:优先队列中的头元素用top()方法 (对比普通队列中取头元素用的是front()方法)
int q1 = que.top().u;
int q2 = que.top().v;

对比普通数据类型优先队列,这里以int为例:

priority_queue<int, vector<int>, less<int> > q1; // 大顶堆,大元素在上
//对于基础类型 默认是大顶堆
priority_queue<int> a;
//等同于 priority_queue<int, vector<int>, less<int> > a;
priority_queue<int, vector<int>, greater<int> > c;
//这样就是小顶堆
priority_queue<int, vector<int>, greater<int> > q2; // 小顶堆,小元素在上

sort()函数:
默认升序:sort(数组名, 数组名+n);

加上cmp比较函数:sort(数组名, 数组名+n, cmp);

在leetcode上自定义sort函数中的cmp需要加static声明。因为在class类中的sort函数的参数cmp,定义时要声明为static,static静态成员函数不用加对象名,就能直接访问函数(这也是静态成员函数的一大优点)

数组排序:

int a[n];
static bool cmp(int a, int b){
return a > b;
}
sort(a, a + n, cmp);

结构体排序:

Student Stu[100];
bool cmp2(Student a,Student b)
{
return a.id > b.id;//按照学号降序排列
//return a.id < b.id;//按照学号升序排列
}
sort(Stu,Stu+100,cmp2);

使用标准库函数:
升序:sort(begin,end,less<data-type>())
降序:sort(begin,end,greater<data-type>())


最后

以上就是粗暴书本为你收集整理的【C/C++】结构体内重载(优先队列或sort()函数对结构体里的元素进行结构体排序)的全部内容,希望文章能够帮你解决【C/C++】结构体内重载(优先队列或sort()函数对结构体里的元素进行结构体排序)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部