![](/img/trans.png)
[英]Why is std::priority_queue sorting its container's elements?
[英]Why does std::priority_queue return largest elements first but use std::less?
為什么std::priority_queue
使用std::less
作為比較類型,卻首先返回最大的元素(即最大優先級隊列)?
當我要創建一個最小隊列時,這特別讓我感到困惑,這將由std::priority_queue<T, std::vector<T>, std::greater<T>>
。
優先級隊列的作用與sort()
相反,使事情變得不太一致。 如果使用greater
比較器對vector
進行sort()
,則向量的front()
是最大值。 如果使用greater
的優先級隊列創建隊列,則front是最小值。 我意識到優先級隊列使用堆,但是我覺得這樣做有充分的理由。
因為編寫代碼很自然,所以在使用堆的方法時?
檢查(簡化的)可能的實現:
template <class T, class Container = std::vector<T>, class Compare = std::less<T> >
class priority_queue {
public:
explicit priority_queue(const Container& c_ = Container(),
const Compare& comp_ = Compare())
: c(c_), comp(comp_)
{
std::make_heap(c.begin(), c.end(), comp);
}
void push(const T& x)
{
c.push_back(x);
std::push_heap(c.begin(), c.end(), comp);
}
void pop()
{
std::pop_heap(c.begin(), c.end(), comp);
c.pop_back();
}
};
我理解您說的話,但正如juanchopanza所說:“如果相反,它可能會使其他人感到困惑”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.