我已经通过函数对象文档了解更多,更少.虽然我有点理解其中的内容,但我还没有得到它.是否会按升序或降序对我的容器进行更大的排序?我特别困惑,因为以下两行似乎在做相反的事情.
std::priority_queue<int,std::vector<int>,std::greater<int> > q2; for(int n : {1,8,5,6,3,4,9,7,2}) q2.push(n); print_queue(p2);
这打印0,1,2,9.但是,
int x[10] = { 1,10 }; std::sort(x,x+10,std::greater<int>());
打印这将给出10,1.
如果有人能够在我的例子中描述“更大”的作用,那将是很好的,而不仅仅是说“更大”的作用.
解决方法
它将升序,您将始终弹出队列中的最小元素.优先级队列的排序与给定的顺序关系相反.
默认模板定义如下所示:
template< class T,class Container = std::vector<T>,class Compare = std::less<typename Container::value_type> > class priority_queue;
它应用较少的<>()(lhs,rhs)来获得“最大”的rhs元素.但在你的情况下,它将应用更大的<>()(lhs,rhs)来获得“最大”的rhs元素(当然它将是最小的).
另一方面,std :: sort保留了您提供的订单类型.所以std :: less将按升序排序,std :: greater按降序排序.