struct event
{
int index, arrival, duration, type, end;
};
struct compare
{
bool operator() (event a, event b)
{
if (a.arrival < b.arrival) return true; // which one gets pushed first?
else return false;
}
};
...
priority_queue < event, vector <event>, compare > pq;
我不理解的是返回true
或false
的含义。如果返回true
,则哪个元素首先被推送到队列中,如果返回false
则是哪个元素?
std::priority_queue
是一个max堆,默认情况下使用std::less
(它是一个使用运算符<
)的函数对象。这意味着如果比较返回false
,则第一个参数更接近顶部。从CPPreference:
优先级队列是一个容器适配器,它提供最大(默认情况下)元素的恒定时间查找,以对数插入和提取为代价。
可以提供用户提供的比较来更改排序,例如,使用std::greater
将导致最小的元素显示为top()
。
标准引用是[alg.heap.operations]。
边注1:如果(expr)返回true,则避免编写;else返回false;
而只支持返回expr;
旁注2:运算符()
应该是const
成员函数,并通过引用const
来获取其参数,以避免不必要的复制。
priority_queue,comparator(query,d)>min_heap; main.cpp:20:7:注意:“comparator”不是文字,因为: class comparator{ main.cpp:20:7:注意:“comparator”不是聚合,没有普通的默认构造函数,也没有不是复制或移动构造函数的constexpr构造函数 Main.cpp:92:65:注意:应为类型,但
我使用的是PriorityQueue和我自己的比较器,但最终结果并不总是好的。我应该按平均成绩、姓名、身份证进行排序。最后,它应该返回队列中剩余的名称。其余的名字都很好,但顺序不同。输入(名称、平均等级、识别号): 预期产出: 我的结果: 你能帮我找出问题所在吗?提前谢谢你!
假设我实现了一个HashMap,其中字符被分配了一个值的ArrayList。 我已经在HashMap中创建了这些字符的PriorityQueue,但我希望能够根据此优先级删除这些字符: {a,b,c} {a,b}删除c,因为它的ArrayList中包含一个值,该值决定必须首先删除它。 对此最好的方法是什么?
由于我对优先级队列的了解有限,所以我尝试实现它,但只能在asc或desc值xx中排序,这不是必需的。 我的方法是 请分享一些想法/方法。 看来很遗憾,我无法为我的情况提供所需的比较器。 不过,还是要在期待中感谢你
我试图用自定义比较器定义优先级队列,如下所示: 这就是显示的编译错误 我还尝试在测试类中声明另一个比较函数,但没有效果。为什么主函数中的优先级队列编译而类中的优先级队列不编译?为比较器定义专用类是这里唯一的工作吗?谢谢你。
有人能解释一下这里使用的比较运算符的语法吗?它是做什么的