C 中的更大/较少功能对象

greater/less function objects in C++

本文关键字:功能 对象      更新时间:2023-10-16

我已经通过函数对象文档更大,更少。尽管我确实了解其中的内容,但我还没有明白。会在上升或降序中使用更大的容器吗?我特别困惑,因为以下两行似乎在做相反的事情。

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。

如果有人能够描述我的示例中"更大"的工作方式,而不仅仅是说"更大"是如何工作的,那将是很好的。

它将上升,您将始终弹出队列的最小元素。优先队列与给出的顺序关系相反。

默认模板定义如下:

template<
    class T,
    class Container = std::vector<T>,
    class Compare = std::less<typename Container::value_type>
> class priority_queue;

它应用less<>()(lhs, rhs)获取"最大" RHS元素。但是就您而言,它将应用greater<>()(lhs, rhs)以获取"最大" RHS元素(当然是最小的)。

另一方面,

std::sort保留了您给它的顺序类型。因此,std::less将按升序排序,而std::greater按降序排序。

std::greater<int>倒置整数的排序。

std::priority_queue默认情况下,下一个最大元素,因此,通过使用std::greater<int>,您可以反转此元素,因此它取消了下一个最小的元素。

同样,默认情况下,std::sort将按升序排序元素,但是通过使用std::greater<int>,您会看到降序排序。