《STL源码分析》中如何priority_queue使用greater函数对象?

从《STL源码分析》中可以看见,priority_queue具有一个:explicitpriority_queue(constCompare&x):c(),comp(x)... 从《STL源码分析》中可以看见,priority_queue具有一个:
explicit priority_queue(const Compare& x) : c() , comp(x) {}的构造函数。
为什么不能使用上述的构造函数 来定义对象的比较函数对象?例如对 int 型队列,为什么不能用
priority_queue<int> q1(greater<int>);
来定义小根堆,而必须是:
priority_queue<int, vector<int>, greater<int> > q1;
展开
 我来答
微风千千万
2019-07-30 · TA获得超过102个赞
知道答主
回答量:31
采纳率:0%
帮助的人:5.6万
展开全部

首先查看手册,priority_queue的定义如下:

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

然后继续看模板的三个参数的说明

—————————以下直接摘抄的—————

Template parameters

T    -    The type of the stored elements. The behavior is undefined if T is not the same type asContainer::value_type. (since C++17)    

Container    -    The type of the underlying container to use to store the elements. The container must satisfy the requirements of SequenceContainer, and its iterators must satisfy the requirements of LegacyRandomAccessIterator. Additionally, it must provide the following functions with the usual semantics:

  • front()

  • push_back()

  • pop_back()

  • The standard containers std::vector and std::deque satisfy these requirements.

Compare    -    A Compare type providing a strict weak ordering.    

—————————以上直接摘抄的—————

故可知,使用priority_queue需要给三个类来实现模板,其中第三个类就是那个比较函数,你问的,为什么要priority_queue<int, vector<int>, greater<int> > q1;已经回答完毕。

另外,可以参考std::less的定义,更深入学习第三个类的含义。已附在引用部分,自行查阅。


std::priority_queue std::less

PS:第一个那家伙回答的什么东西!我本来是不想回答的。。。看见那家伙胡诌一气,气不过。

更多追问追答
追问
您好,我想知道优先级队列的第二个构造函数(上图中红色框标识出来的)应该如何使用?能否在声明一个优先级队列的时候,把函数符greator作为参数,传递给对象,改变其默认的 Compare?
追答

cplusplus.com priority_queue

A priority_queue keeps internally a comparing function and a container object as data. The comparing function is a copy of comp and the underlying container depends on the constructor used:

  • (1) initialization constructor

  • The underlying container is a copy of ctnr, sorted by the make_heap algorithm.

宿主类型成员是复制Comparetor,然后用建堆的算法排序。也就是说,比较函数的设定是在优先队列的类模板中给出的。而优先队列的构造函数只有

  1. 默认构造函数,2.复制构造函数,3.初始内容的构造函数

以下举个例子,对上面三种构造函数的引用

所以,不存在你说的,用Comparetor来构造对象

另,给出的手册上的例子不错,可以看看

l7722526
2019-07-29 · TA获得超过2.7万个赞
知道大有可为答主
回答量:2.8万
采纳率:84%
帮助的人:3594万
展开全部
将 1 - 10 分别输入 A1-A10单元格 B1输入公式 =sum(a1:a10) 就得到1-10的和了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
offersfirst
2019-07-30 · TA获得超过425个赞
知道小有建树答主
回答量:3226
采纳率:35%
帮助的人:257万
展开全部
《STL源码分析》,这本书是哪一种编程语言的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式