使用priority_queue STL实现最小堆的语法是
std::priority_queue<int, std::vector<int>, std::greater<int> > my_min_heap;
而以向量降序实现sort()
的语法为
sort(a.begin(), a.end(), greater<int>());
我的问题是排序后使用(),但没有优先级。为什么会这样?
这里
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
就是这种情况。