我已经通过函数对象文档了解更多,更少。虽然我有点理解其中的内容,但我还没有得到它。我的容器会按升序或降序排序吗?我特别困惑,因为以下两行似乎正在做相反的事情。
std::priority_queue<int, std::vector<int>, std::greater<int> > q2;
for(int n : {1,8,5,6,3,4,0,9,7,2})
q2.push(n);
print_queue(p2);
这会打印0,1,2,3,4,5,6,7,8,9。但是,
int x[10] = { 1,3,5,7,9,2,4,6,8,10 };
std::sort(x,x+10,std::greater<int>());
打印这将给出10,9,8,7,6,5,4,3,2,1。
如果有人可以描述“更大”的话会更好。在我的例子中起作用,而不仅仅是说如何更大&#39;一般都是这样的。
答案 0 :(得分:4)
它将升序,您将始终弹出队列中的最小元素。优先级队列的排序与给定的顺序关系相反。
默认模板定义如下所示:
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
它适用less<>()(lhs, rhs)
来获得最大的&#34; rhs元素。但在你的情况下,它将适用greater<>()(lhs, rhs)
来获得最大的&#34; rhs元素(当然是最小的)。
std::sort
会保留您提供的订单类型。因此std::less
将按升序排序,std::greater
将按降序排序。
答案 1 :(得分:1)
std::greater<int>
反转整数的排序顺序。
std::priority_queue
dequeues the next largest element by default,所以通过使用std::greater<int>
,您可以将其反转,以便将下一个最小的元素出列。
同样,std::sort
默认情况下会按升序对元素进行排序,但使用std::greater<int>
您会看到降序排序。