比较器函数在优先队列中的工作
working of comparator function in priority queue
我不明白比较函数设置的排序顺序。
这是传递给优先级队列的比较器参数的代码:
struct CompareHeight {
bool operator()(Person const& p1, Person const& p2)
{
return p1.height < p2.height;
}
};
这是按高度递减顺序给出输出
示例输出:6 5 4 3 2
不应输出为:2 3 4 5 6
A priority_queue
总是从最大的元素开始(最高优先级),参见例如here.
作为比较器函数,问题将是"Does the first argument come before the second argument in our order?"(根据cppreference.com)。因此,如果要按升序排序,应该比较p1.height > p2.height
。
通常情况下,您的原始代码会起作用,但是,由于这是一个优先级队列,顺序将相反(如 p1.height > p2.height
)。
我不明白比较函数设置的排序顺序。
这是传递给优先级队列的比较器参数的代码:
struct CompareHeight {
bool operator()(Person const& p1, Person const& p2)
{
return p1.height < p2.height;
}
};
这是按高度递减顺序给出输出
示例输出:6 5 4 3 2
不应输出为:2 3 4 5 6
A priority_queue
总是从最大的元素开始(最高优先级),参见例如here.
作为比较器函数,问题将是"Does the first argument come before the second argument in our order?"(根据cppreference.com)。因此,如果要按升序排序,应该比较p1.height > p2.height
。
通常情况下,您的原始代码会起作用,但是,由于这是一个优先级队列,顺序将相反(如 p1.height > p2.height
)。