priority_queue的语法差异,实现最小堆,其向量降序

问题描述 投票:0回答:1

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

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

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

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

我的问题是排序后使用(),但没有优先级。为什么会这样?

c++ sorting stl priority-queue
1个回答
1
投票

这里

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就是这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.