社区讨论

为什么优先队列重载运算符必须反着来?

灌水区参与者 5已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@m5z16lnx
此快照首次捕获于
2025/01/16 15:50
去年
此快照最后确认于
2025/11/04 11:31
4 个月前
查看原帖
rt,现在有一个结构体:
CPP
const int N=1e6+5;
struct edge{
	int u,v,w;
};
我希望使用 std::priority_queue 对 若干个 edge 进行升序排序,于是写出了下面这份代码:
CPP
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;
但经测试,此时优先队列是按降序排序的,更改了运算符重载的内容才能达到预期:
CPP
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;
我寻思升序排序是该写 return a.w<b.w 啊。这是优先队列的某种 feature 吗。

回复

5 条回复,欢迎继续交流。

正在加载回复...