C++中更大/更小的函数对象

Ash*_*ran 7 c++ sorting functor

我已经通过函数对象文档了解更多,更少.虽然我有点理解其中的内容,但我还没有得到它.我的容器会按升序或降序排序吗?我特别困惑,因为以下两行似乎在做相反的事情.

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);
Run Code Online (Sandbox Code Playgroud)

这会打印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>());
Run Code Online (Sandbox Code Playgroud)

打印这将给出10,9,8,7,6,5,4,3,2,1.

如果有人可以在我的例子中描述"更大"是如何工作的,而不仅仅是说"更大"的工作方式,这将是一件好事.

Sto*_*ica 4

它将是升序的,你总是会弹出队列中最小的元素。优先级队列按照给定的顺序关系反向排序。

默认模板定义如下所示:

template<
    class T,
    class Container = std::vector<T>,
    class Compare = std::less<typename Container::value_type>
> class priority_queue;
Run Code Online (Sandbox Code Playgroud)

它适用less<>()(lhs, rhs)于获取“最大”的 rhs 元素。但就您而言,它将适用greater<>()(lhs, rhs)于获取“最大”rhs 元素(当然是最小的)。

std::sort另一方面,保留您提供的订单类型。因此std::less将按升序排序,并按std::greater降序排序。