priority_queue使用降序向量实现最小堆的语法差异

Syntax difference of priority_queue implementing min heap with descending sort of vector

本文关键字:语法 实现 queue 向量 降序 priority      更新时间:2023-10-16

使用 STL 实现最小堆priority_queue语法是

std::priority_queue<int, std::vector<int>, std::greater<int> > my_min_heap;

而按降序实现向量sort()的语法为

sort(a.begin(), a.end(), greater<int>());

我的问题是排序使用((在更大之后,但priority_queue没有。为什么?

这里

std::priority_queue<int, std::vector<int>, std::greater<int> > my_min_heap;

std::greater<int>是模板参数,请注意它位于<>.它是一种类型。另一方面,这里

sort(a.begin(), a.end(), greater<int>());

将创建该类型的实例并将其传递给sort。此外,sort具有比较器的模板参数,但它是从参数(类型为std::greater<int>(推导出来的,因此无需显式指定它。

更具体地说std::greater<int>是一个函子,即对函数调用运算符具有重载的类型。要创建一个实例并使用它来比较两个int,您可以编写:

bool x = std::greater<int>()(5,3);
/*  the type   */
// ^ call constructor
// ^ call the objects operator()

但是,通常相同的函数对象被重用于许多比较,就像std::sort一样。