STL中的priority_queue問

DraculaW 2007-08-08 02:04:08
請問 這個 (const value_type* first, const value_type* last,const Compare& comp)
中 first和last都是起什么作用的...
用 priority_queue <int, vector<int>, greater<int> >來講解一下好么
而且 看msdn說first和last是個inputIterator,
很困惑的問題
...全文
282 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
DraculaW 2007-08-08
  • 打赏
  • 举报
回复
代码中
它的构造函数只是做了这件事情....
c.insert(c.end(), __first, __last);
而 这个c 正是被默认设置为 vector<_Tp>...
taodm 2007-08-08
  • 打赏
  • 举报
回复
去买本《STL源码剖析》,priority_queue一共才要3页纸就全讲完了。
你一看就知道了。
DraculaW 2007-08-08
  • 打赏
  • 举报
回复
这个是我在msdn上拖下来的例子
他的作用我也明白 只是很奇怪
为什么last一般用的是一个vector?
因为我大学时候的一道作业题是这样写的 当时也没有细究..
现在捡起来 发现了
SGI的在这里
http://www.sgi.com/tech/stl/priority_queue.html

MSDN的我拷来了
template<class InputIterator>
priority_queue(
InputIterator _First,
InputIterator _Last,
const Traits& __Comp
);

我想不明白的只是 为什么一个 类型和 这个类型的vector可以做为first和last 或许 得去看看它是怎么实现的...
jixingzhong 2007-08-08
  • 打赏
  • 举报
回复
没见过楼主给的这种形式 ...

不过,从表面看,
first 和 last 就是指示一个数据段,
把这两个位置之间的数据 根据 第三个参数comp指定的优先排序规则 进行有序化 ...
jixingzhong 2007-08-08
  • 打赏
  • 举报
回复
Priority queue constructors
Syntax:
#include <queue>
priority_queue( const Compare& cmp = Compare(), const Container& c = Container() );
priority_queue( input_iterator start, input_iterator end, const Compare& comp = Compare(), const Container& c = Container() );

Priority queues can be constructed with an optional compare function cmp' and an optional container c. If start and end are specified, the priority queue will be constructed with the elements between start and end.
hoya5121 2007-08-08
  • 打赏
  • 举报
回复
請問 這個 (const value_type* first, const value_type* last,const Compare& comp)
中 first和last都是起什么作用的...
---------
first last 简单的说,是2个指针(暂且这样理解吧)分别指向容器的第一个元素和最后面的
在这里作为参数可以表示一个区间,就是从头到尾,给你据个例子:
adjacent_find
template<class FwdIt>
FwdIt adjacent_find(FwdIt first, FwdIt last);
template<class FwdIt, class Pred>
FwdIt adjacent_find(FwdIt first, FwdIt last, Pred pr);
查找条件为毗邻的2个元素满足某种关系
第一个函数是满足 *(first + N) == *(first + N + 1)
第二个函数是满足 pr(*(first + N), *(first + N + 1)) == true
第二个函数的第三个参数是函数对象,理解它之前可以先将其理解成函数,象这样bool pr(T t1, T t2)
引自我的博客: http://blog.csdn.net/hoya5121/archive/2007/08/06/1728138.aspx



用 priority_queue <int, vector<int>, greater<int> >來講解一下好么
而且 看msdn說first和last是個inputIterator,
很困惑的問題
---------------
所谓inputIterator意思是说这个"指针"是指向输入(只读)参数的.
priority_queue是个优先队列,大概意思是说你将元素插入队列后就自动按照你提前告诉它的优先方式来排序插入.
如:less<class T> 这是按值大的优先 greater<class T>这是按值小的优先,
priority_queue<class T, class comp=less< class Y>> 默认的是以大为先

如果你还是不太懂的话,建议你先学习stl的基本知识
healer_kx 2007-08-08
  • 打赏
  • 举报
回复
难道不是beigin和end的意思?
taodm 2007-08-08
  • 打赏
  • 举报
回复
嗯,这个还真没用过。建议看<STL源码剖析>

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧