由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 问个很弱的stl的priority queue问题
相关主题
STL里的priority_queue到底有啥用?How to implement swap of two containers in c++?
[合集] 一个已经排序好的数组,就是一个堆heap吗?问一个sort的问题
问两个C++面世小问题问个INTERVIEW QUESTION
请教C++ STL中priority_queue模板参数中的Compare函数问个简单的问题
set and compare问个stl的问题
请教用c++读取large file怎么可以快一些?问个游戏开发相关的问题
问一下STL里的queue, and stack 遍历的问题 (转载)现在candidate基础太差。问个os里的电梯算法吱吱唔唔说不出来
请教一个java的comparator的问题server端用Threadpool实现request/response的两种不同方法比较
相关话题的讨论汇总
话题: compare话题: queue话题: class话题: priority话题: comp
进入Programming版参与讨论
1 (共1页)
B*******1
发帖数: 2454
1
priority queue 默认就是max heap,但是它的compare函数默认是less的
根据compare class的描述:
Compare: Comparison class: A class such that the expression comp(a,b), where
comp is an object of this class and a and b are elements of the container,
returns true if a is to be placed earlier than b in a strict weak ordering
operation.
如果有a,b, a< b, 那么comp(a,b)就会return true,那么a应该放在b之前阿,但是
为什么会相反的呢?
y*******g
发帖数: 6599
2
compare的描述就是说的less啊

where
,

【在 B*******1 的大作中提到】
: priority queue 默认就是max heap,但是它的compare函数默认是less的
: 根据compare class的描述:
: Compare: Comparison class: A class such that the expression comp(a,b), where
: comp is an object of this class and a and b are elements of the container,
: returns true if a is to be placed earlier than b in a strict weak ordering
: operation.
: 如果有a,b, a< b, 那么comp(a,b)就会return true,那么a应该放在b之前阿,但是
: 为什么会相反的呢?

B*******1
发帖数: 2454
3
为什么呢?
compare 如果是true的话,a就排在b之前
那么less 的话,a < b就是true了
但是默认是max heap
如果push 0 - 20 进去
queue 里面是20 19......

【在 y*******g 的大作中提到】
: compare的描述就是说的less啊
:
: where
: ,

t****t
发帖数: 6806
4
compare class里说的a在b之前, 和priority queue里的顺序是两回事

【在 B*******1 的大作中提到】
: 为什么呢?
: compare 如果是true的话,a就排在b之前
: 那么less 的话,a < b就是true了
: 但是默认是max heap
: 如果push 0 - 20 进去
: queue 里面是20 19......

d****n
发帖数: 12461
5
如果less是3<5,那就是最大的排在前面。如果less是5<3,重载<,那就是最小的排在
前面,明白?

【在 B*******1 的大作中提到】
: 为什么呢?
: compare 如果是true的话,a就排在b之前
: 那么less 的话,a < b就是true了
: 但是默认是max heap
: 如果push 0 - 20 进去
: queue 里面是20 19......

S****z
发帖数: 666
6
我来尝试解析一下原文:
Elements are popped from the "back" of the specific container, which is
known as the top of the priority queue.
所以a是在b的前面,但是它的top是从后面开始的,
所以出现你说的“相反”的情况

where
,

【在 B*******1 的大作中提到】
: priority queue 默认就是max heap,但是它的compare函数默认是less的
: 根据compare class的描述:
: Compare: Comparison class: A class such that the expression comp(a,b), where
: comp is an object of this class and a and b are elements of the container,
: returns true if a is to be placed earlier than b in a strict weak ordering
: operation.
: 如果有a,b, a< b, 那么comp(a,b)就会return true,那么a应该放在b之前阿,但是
: 为什么会相反的呢?

B*******1
发帖数: 2454
7
大牛,那么这个a在b之前究竟是什么意思呢?

【在 t****t 的大作中提到】
: compare class里说的a在b之前, 和priority queue里的顺序是两回事
B*******1
发帖数: 2454
8
thanks, 我的确看漏了这行,那就是说如果container里面顺序是a,b,c,那么就pop最后
的c
但是我刚在vc2005里面try了一下,我push 了0,1,2 ,container里面的element是
c[0] = 2
c[1] = 0
c[2] = 1
现在top就是c[0]了,但是back不是c[2]吗?
谢谢各位的回答。

【在 S****z 的大作中提到】
: 我来尝试解析一下原文:
: Elements are popped from the "back" of the specific container, which is
: known as the top of the priority queue.
: 所以a是在b的前面,但是它的top是从后面开始的,
: 所以出现你说的“相反”的情况
:
: where
: ,

t****t
发帖数: 6806
9
as you know priority queue is implemented with heap in . top() (i
.e. container.front()) is always the maximum element (defined by Compare()).
but when popping from the heap, the front() is swapped with back() and then
removed with container.pop_back(). so effectively pop() pops from front.
as for the order of Compare(), it is the weak ordering defined by Compare().
if you don't know what is weak ordering, never mind it.

【在 B*******1 的大作中提到】
: thanks, 我的确看漏了这行,那就是说如果container里面顺序是a,b,c,那么就pop最后
: 的c
: 但是我刚在vc2005里面try了一下,我push 了0,1,2 ,container里面的element是
: c[0] = 2
: c[1] = 0
: c[2] = 1
: 现在top就是c[0]了,但是back不是c[2]吗?
: 谢谢各位的回答。

S****z
发帖数: 666
10
晕,大胆请教这样的一个简单的情况:
用数组实现最大堆的著名步骤MAX-HEAPIFY是如何把一个小元素往下挪的?

【在 B*******1 的大作中提到】
: thanks, 我的确看漏了这行,那就是说如果container里面顺序是a,b,c,那么就pop最后
: 的c
: 但是我刚在vc2005里面try了一下,我push 了0,1,2 ,container里面的element是
: c[0] = 2
: c[1] = 0
: c[2] = 1
: 现在top就是c[0]了,但是back不是c[2]吗?
: 谢谢各位的回答。

S****z
发帖数: 666
11
长周末不出去转转?

(i
).
then
).
最后

【在 t****t 的大作中提到】
: as you know priority queue is implemented with heap in . top() (i
: .e. container.front()) is always the maximum element (defined by Compare()).
: but when popping from the heap, the front() is swapped with back() and then
: removed with container.pop_back(). so effectively pop() pops from front.
: as for the order of Compare(), it is the weak ordering defined by Compare().
: if you don't know what is weak ordering, never mind it.

h*********n
发帖数: 11319
12
wikipedia上有代码

最后
is

【在 S****z 的大作中提到】
: 晕,大胆请教这样的一个简单的情况:
: 用数组实现最大堆的著名步骤MAX-HEAPIFY是如何把一个小元素往下挪的?

B*******1
发帖数: 2454
13
thanks. now i understand.

【在 S****z 的大作中提到】
: 晕,大胆请教这样的一个简单的情况:
: 用数组实现最大堆的著名步骤MAX-HEAPIFY是如何把一个小元素往下挪的?

B*******1
发帖数: 2454
14
Thanks. Now I get it.

(i
).
then
).

【在 t****t 的大作中提到】
: as you know priority queue is implemented with heap in . top() (i
: .e. container.front()) is always the maximum element (defined by Compare()).
: but when popping from the heap, the front() is swapped with back() and then
: removed with container.pop_back(). so effectively pop() pops from front.
: as for the order of Compare(), it is the weak ordering defined by Compare().
: if you don't know what is weak ordering, never mind it.

1 (共1页)
进入Programming版参与讨论
相关主题
server端用Threadpool实现request/response的两种不同方法比较set and compare
问个BT问题 :)(c )请教用c++读取large file怎么可以快一些?
问个编程问题, 怎么计算referal问一下STL里的queue, and stack 遍历的问题 (转载)
how to know the contents in Message queue?请教一个java的comparator的问题
STL里的priority_queue到底有啥用?How to implement swap of two containers in c++?
[合集] 一个已经排序好的数组,就是一个堆heap吗?问一个sort的问题
问两个C++面世小问题问个INTERVIEW QUESTION
请教C++ STL中priority_queue模板参数中的Compare函数问个简单的问题
相关话题的讨论汇总
话题: compare话题: queue话题: class话题: priority话题: comp