C++中priority_queue存储结构体时重载操作符的说明

yuanheci 2023年03月05日 309次浏览

  基本数据类型时,直接用priority_queue<int> heap, priority_queue<int, vector<int>, greater<int>> heap即可。

  priority_queue中存储结构体时,需要自定义比较规则,比较绕,这里记录一下。

作为大根堆使用时

priority_queue<Seg> heap

  大根堆需要重载小于号,如果我们要实现一个双关键字排序,首先按照v从大到小排,v相等的情况下按照l从小到大排。因此写v < t.v就是让v按照大根堆从大到小排。但是!!实现从小到大排,就要反一下了,写成l > t.l

struct Seg{
	int l, r, v;      
    bool operator< (const Seg& t) const{
    	if(v != t.v) return v < t.v;
        return l > t.l;
    }
};

作为小根堆使用时

priority_queue<Seg, vector<Seg>, greater<Seg>> heap

  小根堆需要重载大于号,如果我们要实现一个双关键字排序,首先按照v从小到大排,v相等的情况下按照l从大到小排。因此写v > t.v就是让v按照小根堆从小到大排。但是!!实现从大到小排,就要反一下了,写成l < t.l

struct Seg{
	int l, r, v;      
    bool operator> (const Seg& t) const{
    	if(v != t.v) return v > t.v;
        return l < t.l;
    }
};