0 {) w( y1 K0 kint _tmain(int argc, _TCHAR* argv[])4 w" V/ j' g2 A0 r( K
{# W% s l5 A3 `( r) i) e
std::priority_queue<int, std::vector<int>, std::greater<int> > q; " B: D+ H- t' g* F6 Y9 ]/ K- }5 v" t, P( p: w
q.push(90);5 D3 k! R' _) s2 e* R
q.push(100); + ~6 M& u2 b- j2 N5 {! I4 _ q.push(70); 4 ^' o4 A4 e9 v! n0 D, ? q.push(80);( M" A4 U0 B- i% c. x0 V+ x% z
while (!q.empty()); W2 }) X4 J' M
{ 9 a0 d4 s9 A- M7 k std::cout << q.top() << std::endl;$ Y) n% V' M% H' z9 f+ w
q.pop(); * p" z/ m" z2 b9 e% r } e0 i1 z! K9 ~3 [% S' e return 0; 1 {9 o8 l3 S8 I2 o; g7 V1 s- u. P. U}# O" y0 V4 w8 {; J' Y' Y1 p/ e
std::greater改成std::less由大到小输出
三 自定义类型的比较
class Node/ k$ r4 Y U. n3 u
{$ o& L3 v. O2 h+ e( H
public: 7 _% u2 [" d/ Z4 F u( g9 ]' \/ ]% T7 K1 h, _ \
int weight;) e( W- y' F2 r& c
int value; 4 a3 e7 N* v. B4 Z/ c$ ^ double bound;. c7 F$ f* m! z/ C
- M' t6 }, e+ Dpublic:, q/ T# ?- O+ J" U
Node(int w, int v, double b) : weight(w), value(v),bound(b){} 8 J. w3 a; P5 H bool operator ()(const Node & n1, const Node & n2)( i) i1 H+ N* {8 r! Q9 h
{ / d% j2 O& N# b8 C! n if (n1.bound < n2.bound) return true; 1 u: j) y) ^' c5 r$ K' S( O' D" k+ X, s' s8 G
if (n1.bound > n2.bound) " ?3 {$ V7 |* a9 \: M7 P& V' T e return false;0 `& V& x. }: ]' s$ J: Y5 ~
else 1 N0 {: O/ M( H# w: o return false;//strict weak ordering 条款21: 永远让比较函数对相等的值返回false q2 u, K* w: g [ }3 R( ~! N# s) }3 ~3 E1 S
; H/ ?1 y3 d3 [! k0 O' \ Node(), l0 T7 Z5 {" u8 z
{) h" V$ r' v x( G
2 X5 Q- b7 v- _0 R6 |$ {- X
weight = 0;0 E8 L, g9 n- A
value = 0; & T e6 e$ [# \+ a" u bound = 0.0; 5 V1 c2 b5 e1 R2 g }, g8 F7 O1 i* Z
7 J$ X* [' `; P% w/ r, p" \# \};$ m. F8 A6 `# g/ ?% S8 V+ J, g. n b
int _tmain(int argc, _TCHAR* argv[]) 9 U0 ?, J$ @ n{ * G4 `7 O# Q3 M$ g7 Q: qstd::priority_queue <Node, std::vector <Node>, Node > q; & v9 a! F% C( ?4 e2 N+ C- b1 {! ]! S; r; W
Node root(1, 7, 5.0);6 e+ ~- l( O0 |9 s" h" X* q9 K
Node branch(3, 6, 7.0);7 u) X* U5 n5 A, {
Node leaf(5, 8, 6.0); - ?- m" J( d% f. `9 Q' D3 X9 L: \" r- H8 e8 z) }+ {- G
: }9 ~) N7 n7 D5 b4 F0 d
q.push(root);: J( j' X; i+ [1 [* x7 U( h* J
q.push(branch); 6 k- T6 U5 K9 `, W/ v$ { l q.push(leaf); k9 M ^; f1 r; B ' ]( n% O4 U4 S( F% ?/ Y5 X. z while (!q.empty()) + d3 V, R5 k8 i- Z4 q {, j/ T7 @: I/ l5 { e/ c* Z8 j
std::cout << ' ' << q.top().value;. O' \0 Z) A) }1 s A
q.pop(); # d4 }; {. y2 `. K9 M1 `2 M } ; w2 E+ f: }0 H std::cout << '\n';/ C Y9 B- Q, R2 U
; p/ p+ L: b$ Z
return 0; 2 `! t( N& S4 E2 b, y( {- g}. g! X/ W) H4 E- ^/ e
按照bound排序输出6,8 7) k$ R) D1 o+ \# W. `. c
" c" i6 B z9 @& z% \- h$ ~" K