当前位置: 首页 > news >正文

如何在set和priorty_queue中自定义排序方式

如何理解优先队列结构体或类的自定义排序方式

在结构体或类中重载小于号

首先 默认为大根堆 top为最大的元素

struct Student {
    string name;
    int score;

    bool operator<(const Student &other) const {
        return score<other.score;
    }
};

priority_queue<Student>pq;

注意 结构体当然要自定义排序方式 上面的就是实现默认大根堆顺序 把score最大的放在top

看小于号方向就行了 都是重载的小于号 只要return里的不等号也是小于号 那么就是默认大根堆顺序

如果要改成小根堆 就把不等号改成大于号就行
return的方向跟重载的<相反 那么就理解为跟默认排序方式相反 就变成了小根堆

在结构体外另写仿函数

理解方式跟上面一样 但重载的是()

struct cmp{
    bool operator()(const Student&a,const Student&b) const{
        return a.score>b.score;//不等号方向跟上面的重载一样 这里的写法就是小根堆
    }
};
//结构体中没有重载小于号
priority_queue<Student,vector<Student>,cmp>pq;





set在结构体或类中重载小于号

重载方式跟sort一样

struct node{
    int x,y;

    bool operator<(node other) const{
        return x<other.x;
    }
};
set<node>st;//按照x升序排序


关于内置数据类型的排序

– 建议直接用greater<int>
set默认升序 set<int,greater<int>>st; 就变成降序

– pq默认大根堆priority_queue<int,vector<int>,greater<int>>pq;
就变成了小根堆



– 当然也可以自己搞
写一个仿函数
记得重载的是()
不是<

set

struct cmp {
    bool operator()(const int& a, const int& b) const {
        return a > b; // 降序排序
    }
};
set<int,cmp>st;

set的排序 就跟sort的cmp一样理解
a>b表示大的在前面 就是降序

priority_queue

默认大根堆

struct cmp {
    bool operator()(const int& a, const int& b) const {
        return a > b;//小根堆
    }
};
priority_queue<int,vector<int>,cmp)pq;

理解方式同自定义数据类型

相关文章:

  • 【软考-架构】10.3、处理流程设计-系统设计-人机界面设计
  • Mybatis中封装数据如何自定义一个数据类型处理器
  • MySQL数据库和表的操作之数据库操作
  • J2EE框架技术 第六章 J2EE的AOP
  • 单例模式详解
  • Git 分支
  • 智能交通预警杆:守护道路安全的科技先锋
  • 移动端六大语言速记:第3部分 - 函数与方法
  • Unbantu24.04配置-软件安装
  • Python Cookbook-4.15 字典的一键多值
  • 用“断舍离”整理你的数据:Lasso回归解读
  • Java——输入,循环,BigInteger,拷贝,排序
  • 【C++标准IO库】字符串流
  • 数据结构 -- 树的应用(哈夫曼树和并查集)
  • Python之贪心算法
  • PyTorch 深度学习实战(29):目标检测与 YOLOv12 实战
  • 【多线程】单例模式和阻塞队列
  • 云原生系列-K8S实战
  • Linux 练习三 Keepalive+LVS+Nginx+NFS高可用架构
  • 玛卡巴卡的k8s知识点问答题(五)