社区讨论
为什么优先队列重载运算符必须反着来?
灌水区参与者 5已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @m5z16lnx
- 此快照首次捕获于
- 2025/01/16 15:50 去年
- 此快照最后确认于
- 2025/11/04 11:31 4 个月前
rt,现在有一个结构体:
CPPconst int N=1e6+5;
struct edge{
int u,v,w;
};
我希望使用
CPPstd::priority_queue 对 若干个 edge 进行升序排序,于是写出了下面这份代码:const int N=1e6+5;
struct edge{
int u,v,w;
friend bool operator < (edge a,edge b){
return a.w<b.w;//注意这行
}
};
priority_queue<edge,vector<edge>,less<edge> > q;
但经测试,此时优先队列是按降序排序的,更改了运算符重载的内容才能达到预期:
CPPstruct edge{
int u,v,w;
friend bool operator < (edge a,edge b){
return a.w>b.w;//把 < 改成了 >
}
};
priority_queue<edge,vector<edge>,less<edge> > q;
我寻思升序排序是该写
return a.w<b.w 啊。这是优先队列的某种 feature 吗。回复
共 5 条回复,欢迎继续交流。
正在加载回复...