为什么优先队列重载运算符必须反着来?
  • 板块灌水区
  • 楼主mcmahaoran
  • 当前回复3
  • 已保存回复4
  • 发布时间2025/1/16 15:49
  • 上次更新2025/1/16 18:20:45
查看原帖
为什么优先队列重载运算符必须反着来?
1020916
mcmahaoran楼主2025/1/16 15:49

rt,现在有一个结构体:

const int N=1e6+5;
struct edge{
	int u,v,w;
};

我希望使用 std::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;

但经测试,此时优先队列是按降序排序的,更改了运算符重载的内容才能达到预期:

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 吗。

2025/1/16 15:49
加载中...