Module ā§ Âˇ priority_queue: āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻž āĻāĻā§ āĻŦā§āϰā§āϝāĻŧ
priority_queue: āĻāĻā§ āĻŦā§āϰā§āϝāĻŧ āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻž, āϝāĻāύāĻ āĻāϏā§āĻ āύāĻž āĻā§āύ
āĻāĻ lesson-āĻ āϝāĻž āĻļāĻŋāĻāĻŦā§
- āĻāĻāĻāĻž
std::priority_queuedeclare āĻāϰ⧠push āĻāϰāϤā§,top()āĻĻāĻŋāϝāĻŧā§ āĻĻā§āĻāϤ⧠āĻāϰ pop āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§, āĻāϰ āĻŦāϞāϤ⧠āĻĒāĻžāϰāĻŦā§ āĻā§āύ āĻŽāĻžāύāĻāĻž āĻāĻā§ āĻĢā§āϰāϤ āĻāϏā§: āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻž, āϝ⧠āĻā§āϰāĻŽā§āĻ āĻāϏā§āĻ āύāĻž āĻā§āύāĨ¤ - āĻā§āϤāϰā§āϰ heap-āĻāĻž āĻā§āĻā§āϰ āϏāĻžāĻŽāύ⧠āĻĻā§āĻāϤ⧠āĻĒāĻžāϰāĻŦā§: level āϧāϰ⧠āϧāϰ⧠āĻāĻāĻāĻž vector-āĻ āϰāĻžāĻāĻž āĻāĻāĻāĻž treeāĨ¤ āĻŦā§āĻāĻŋāϝāĻŧā§ āĻŦāϞāϤ⧠āĻĒāĻžāϰāĻŦā§, āĻā§āύ āĻāĻāĻāĻž push āĻŦāĻĄāĻŧāĻā§āϰ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ log2 n level āĻāĻ ā§, āĻāϰ āĻāĻāĻāĻž pop āϤāϤāĻāĻžāĻ āύāĻžāĻŽā§āĨ¤
empty()check āĻāϰ⧠āύāĻŋāϝāĻŧā§ "āĻāĻā§ āĻĒāĻĄāĻŧā§, āϤāĻžāϰāĻĒāϰ pop" idiom āϞāĻŋāĻāϤ⧠āĻĒāĻžāϰāĻŦā§, āĻāϰgreater<int>āĻĻāĻŋāϝāĻŧā§ āĻāĻ āϞāĻžāĻāύā§āĻ āĻāĻŽāύ heap āĻŦāĻžāύāĻžāϤ⧠āĻĒāĻžāϰāĻŦā§, āϝā§āĻāĻž āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āĻāĻāĻž āĻāĻā§ āĻĻā§āϝāĻŧāĨ¤
Maria āϏā§āĻā§āϞā§āϰ computer lab-āĻāϰ help desk āĻāĻžāϞāĻžāϝāĻŧ, āĻāϰ āĻāĻāĻžāύ⧠āĻĒā§āϰāϤāĻŋāĻāĻž report āĻĒāĻžāϝāĻŧ āĻāĻāĻāĻž urgency, āĻŽāĻžāύ⧠āĻāϤāĻāĻž āĻāϰā§āϰāĻŋ āϤāĻžāϰ āĻāĻāĻāĻž āύāĻŽā§āĻŦāϰāĨ¤ āĻ āϏāĻŦāϏāĻŽāϝāĻŧ āĻā§āϞāĻž report-āĻā§āϞā§āϰ āĻŽāϧā§āϝ⧠āϏāĻŦāĻā§āϝāĻŧā§ āĻāϰā§āϰāĻŋāĻāĻž āĻāĻā§ āύā§āϝāĻŧ, āϏā§āĻāĻž āϝāĻāύāĻ āĻāϏā§āĻāĨ¤ Module 6-āĻāϰ queue āĻšāϞ⧠āĻĒāϰā§āĻā§āώāĻžāϰ āĻ āĻŋāĻ āĻāĻā§ āύāώā§āĻ āĻšāĻāϝāĻŧāĻž projector-āĻāĻžāĻā§ āĻāϞā§āϞāĻŋāĻļāĻāĻž password reset-āĻāϰ āĻĒā§āĻāύ⧠āĻĻāĻžāĻāĻĄāĻŧāĻŋāϝāĻŧā§ āĻĨāĻžāĻāϤ⧠āĻšāϤā§āĨ¤ Vector āĻšāϞ⧠āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āύā§āĻāϝāĻŧāĻžāϰ āĻāĻā§ āĻĒā§āϰā§āĻāĻž āĻā§āĻāĻāϤ⧠āĻšāϤā§, āύāϝāĻŧāϤ⧠sort āĻāϰāϤ⧠āĻšāϤā§āĨ¤ āĻāĻ lesson āĻāĻā§ āĻāĻŽāύ āĻāĻāĻāĻž container āĻĻā§āĻŦā§, āϝā§āĻāĻž āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻž āĻāĻā§ āĻĢā§āϰāϤ āĻĻā§āϝāĻŧ, āĻāϰ āĻĻā§āĻāĻžāĻŦā§ āĻā§āύ āĻāĻžāĻāĻāĻž āϏāϏā§āϤāĻžāĨ¤
āĻāĻā§ āĻā§ āĻŦā§āϰā§āϝāĻŧ: āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻž
Module 6-āĻāϰ lesson 04 āĻĒā§āϰāϤāĻŋāĻāĻž āĻāĻžāĻāĻā§ āĻāĻāĻāĻžāĻ āĻĒā§āϰāĻļā§āύ āĻāϰā§āĻāĻŋāϞ: āĻāĻā§ āĻā§ āĻŦā§āϰā§āĻŦā§? Stack-āĻāϰ āĻāϤā§āϤāϰ āϏāĻŦāĻā§āϝāĻŧā§ āύāϤā§āύāĻāĻž, queue-āĻāϰ āϏāĻŦāĻā§āϝāĻŧā§ āĻĒā§āϰā§āύā§āĻāĻžāĨ¤ Maria-āϰ āĻĻāϰāĻāĻžāϰ āϤā§āϤā§āϝāĻŧ āĻāϤā§āϤāϰāĻāĻž, āϏāĻŦāĻā§āϝāĻŧā§ āĻāϰā§āϰāĻŋāĻāĻž, āĻāϰ āĻāϰ container āĻšāϞ⧠priority_queue: āĻā§āϤāϰ⧠āϝāĻž āĻāĻā§, āϤāĻžāϰ āĻŽāϧā§āϝ⧠āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧ āĻŽāĻžāύāĻāĻž āĻ āϏāĻŦāϏāĻŽāϝāĻŧ āĻāĻā§ āĻĢā§āϰāϤ āĻĻā§āϝāĻŧāĨ¤ āύāĻŋāĻā§ āĻāĻāĻ āĻāĻžāϰāĻāĻž urgency āĻĻā§āĻā§āϤā§āĻ āĻĸā§āĻā§āĨ¤
Queue urgency-āĻā§āϞ⧠āĻĢā§āϰāϤ āĻĻā§āϝāĻŧ āĻ āĻŋāĻ āϝ⧠āĻā§āϰāĻŽā§ āĻāϏā§āĻāĻŋāϞāĨ¤ āĻāϰ priority_queue āĻāĻā§ āĻĻā§āϝāĻŧ 9, āϝāĻĻāĻŋāĻ āĻāĻāĻž āĻāϏā§āĻāĻŋāϞ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧāĨ¤ āϤāĻžāĻ priority_queue-āĻ āĻāϏāĻžāϰ āĻā§āϰāĻŽ āĻāĻŋāĻā§āĻ āĻ āĻŋāĻ āĻāϰ⧠āύāĻž; āĻ āĻŋāĻ āĻāϰ⧠āĻļā§āϧ⧠āĻŽāĻžāύāĻā§āϞā§āĨ¤
Heap: āĻāĻāĻāĻž tree, āϝ⧠āĻāĻāĻāĻžāĻ āĻāĻĨāĻž āĻĻā§āϝāĻŧ
āĻāĻā§āϰ āĻĒāϰ āĻāĻ push-āĻāϰ āĻŽāĻžāĻā§āĻ āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻž āĻāĻ āĻāϰ⧠āĻā§āĻāĻā§ āĻĒā§āϤ⧠priority_queue āĻāϰ āĻŽāĻžāύāĻā§āϞ⧠āϰāĻžāĻā§ āĻāĻāĻāĻž heap-āĻ, āϝā§āĻāĻž āĻāĻ āϰāĻāĻŽā§āϰ treeāĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž āĻŽāĻžāύ āĻŦāϏ⧠āĻāĻāĻāĻž node-āĻ, āĻāϰ āĻāĻāĻāĻž node-āĻāϰ āύāĻŋāĻā§ āĻŦāĻĄāĻŧāĻā§āϰ āĻĻā§āĻāĻāĻž node āĻā§āϞāϤ⧠āĻĒāĻžāϰā§, āĻāϰāĻž āĻāϰ childāĨ¤ āĻā§āύ⧠child-āĻāϰ āĻ āĻŋāĻ āĻāĻĒāϰā§āϰ node-āĻāĻž āĻāϰ parent, āĻāϰ āĻāĻāĻĻāĻŽ āĻāĻĒāϰā§āϰ āϝ⧠node-āĻāϰ āĻā§āύ⧠parent āύā§āĻ, āϏā§āĻāĻž rootāĨ¤
Heap āĻāĻĨāĻž āĻĻā§āϝāĻŧ āĻāĻāĻāĻžāĻ: āĻĒā§āϰāϤāĻŋāĻāĻž parent āĻāϰ child-āĻĻā§āϰ āĻā§āϝāĻŧā§ āĻā§āĻ āύāĻžāĨ¤ āϤāĻžāĻ āĻāĻĒāϰā§āϰ āĻĻāĻŋāĻā§ āĻāĻ āϤ⧠āĻĨāĻžāĻāϞ⧠āĻŽāĻžāύ āĻāĻāύ⧠āĻāĻŽā§ āύāĻž, āĻāϰ root-āĻ āĻĨāĻžāĻā§ āϏāĻŦāĻžāϰ āĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻžāĨ¤ āĻāϰ āĻŦāĻžāĻāϰ⧠āĻāϰ āĻā§āύ⧠āĻāĻĨāĻž āύā§āĻ: āĻāĻāĻ parent-āĻāϰ āĻĻā§āĻ child āϝā§āĻā§āύ⧠āĻā§āϰāĻŽā§ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϤāĻžāĻ āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻž āϏāĻŦāϏāĻŽāϝāĻŧ root-āĻ āĻ āĻĒā§āĻā§āώāĻž āĻāϰā§, āĻāϰ āĻŦāĻžāĻāĻŋāϰāĻž āĻĨāĻžāĻā§ āĻāϧāĻž-āϏāĻžāĻāĻžāύā§āĨ¤
Tree-āĻāĻž āĻĨāĻžāĻā§ āĻāĻāĻāĻž vector-āĻāϰ āĻā§āϤāϰā§
Tree-āĻāĻž āĻāϞāĻžāĻĻāĻž āĻāϞāĻžāĻĻāĻž node āĻĻāĻŋāϝāĻŧā§ āĻŦāĻžāύāĻžāύ⧠āĻšāϝāĻŧ āύāĻžāĨ¤ āĻāĻāĻž āϞā§āĻāĻž āĻšāϝāĻŧ āĻāĻāĻāĻžāĻ vector-āĻ, level āϧāϰ⧠āϧāϰā§, āĻŦāĻžāĻ āĻĨā§āĻā§ āĻĄāĻžāύā§āĨ¤ Level āĻŽāĻžāύ⧠tree-āϰ āĻāĻāĻāĻž āϏāĻžāϰāĻŋ, āĻāϰ slot āĻŽāĻžāύ⧠vector-āĻāϰ āĻāĻāĻāĻž āĻāϰ, āĻā§āύāĻž āĻļā§āϰ⧠0 āĻĨā§āĻā§āĨ¤ āĻāĻŦāĻŋāϤ⧠āĻāĻā§ āϏā§āĻ heap, āϝā§āĻāĻž āĻĒāϰā§āϰ āĻ āĻāĻļ āĻŦāĻžāύāĻžāĻŦā§āĨ¤
āĻĒā§āϰāϤāĻŋāĻāĻž level-āĻ āĻāĻžāϝāĻŧāĻāĻž āĻĨāĻžāĻā§ āĻāĻĒāϰā§āϰāĻāĻžāϰ āĻĻā§āĻŦāĻŋāĻā§āĻŖ: 1, 2, 4, 8, āĻāĻāĻžāĻŦā§ āĻŦāĻžāĻĄāĻŧāϤ⧠āĻĨāĻžāĻā§āĨ¤ āϤāĻžāĻ 7āĻāĻž āĻŽāĻžāύ āĻāϰāĻžāϝāĻŧ 3āĻāĻž level, āĻāϰ 1,000,000 āĻŽāĻžāύā§āϰ āĻāύā§āϝ āϞāĻžāĻā§ āĻŽāĻžāϤā§āϰ 20āĻāĻžāĨ¤ āĻāĻ āϏāĻāĻā§āϝāĻžāĻāĻž āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ log2 n, āĻŽāĻžāύ⧠n-āĻā§ āĻāϤāĻŦāĻžāϰ āĻ āϰā§āϧā§āĻ āĻāϰāϞ⧠1-āĻ āĻĒā§āĻāĻāĻžāĻāĨ¤ āĻā§āύ slot āĻāĻžāϰ parent, āϏā§āĻ āĻšāĻŋāϏāĻžāĻŦ āĻāϰāĻŦā§ lesson 05āĨ¤ āϤāĻžāĻ āĻāĻāĻāĻž āĻŽāĻžāύ āĻŦāĻĄāĻŧāĻā§āϰ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ log2 n level āĻĒāĻžāϰ āĻšāϝāĻŧ, āĻāϰ āĻāĻāύā§āϝāĻ heap āĻĻā§āϰā§āϤ āĻĨāĻžāĻā§āĨ¤
Push āĻŽāĻžāύ⧠āĻāĻĒāϰ⧠āĻāĻ āĻž
āĻāĻŦāĻžāϰ heap-āĻāĻžāĻā§ āύāĻĄāĻŧāϤ⧠āĻĻā§āĻā§āĨ¤ āĻāĻāĻāĻž āĻāĻžāϞāĻŋ priority_queue<int>-āĻ āĻāϝāĻŧāĻāĻž āĻŽāĻžāύ āĻĸā§āĻā§: 4, 9, 2, 7, 5 āĻāϰ 8āĨ¤ āϧāĻžāĻĒā§ āϧāĻžāĻĒā§ āĻāĻžāϞāĻžāĻ, āĻāϰ āĻā§āϝāĻŧāĻžāϞ āĻāϰ⧠āĻĒā§āϰāϤāĻŋāĻāĻž āύāϤā§āύ āĻŽāĻžāύ āĻā§āĻĨāĻžāϝāĻŧ āĻāĻŋāϝāĻŧā§ āĻŦāϏā§, āĻāϰ āĻāϤāĻĻā§āϰ āĻāĻ ā§āĨ¤
āĻĒā§āϰāϤāĻŋāĻāĻž push āĻāĻāĻ āĻĻā§āĻāĻāĻž āĻāĻžāĻ āĻāϰā§āĻā§āĨ¤ āύāϤā§āύ āĻŽāĻžāύ āĻā§āĻā§ āĻĒāϰā§āϰ āĻāĻžāϞāĻŋ slot-āĻ, āĻāĻāĻĻāĻŽ āύāĻŋāĻā§āϰ level-āĻāĨ¤ āϤāĻžāϰāĻĒāϰ āĻ āĻāĻĒāϰ⧠āĻāĻ ā§āĻā§: āϝāϤāĻā§āώāĻŖ parent-āĻāϰ āĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧ, āϤāϤāĻā§āώāĻŖ parent-āĻāϰ āϏāĻžāĻĨā§ swap āĻāϰā§āĻā§; āĻāĻŽāύ āĻĒā§āϰāϤāĻŋāĻāĻž swap-āĻā§ āĻŦāϞ⧠sift upāĨ¤ 9 āĻāĻ ā§ āĻā§āĻā§ root āĻĒāϰā§āϝāύā§āϤ, 7 āĻāϰ 8 āĻāĻ level āĻāϰā§, āĻāϰ 2 āĻāϰ 5 āĻāĻāĻā§āĻ āĻāĻ ā§āύāĻŋāĨ¤ āϤāĻžāĻ āĻāĻāĻāĻž push āĻĒā§āϰāϤāĻŋ level-āĻ āĻŦāĻĄāĻŧāĻā§āϰ āĻāĻāĻāĻž swap āĻāϰā§āĨ¤
Pop āĻŽāĻžāύ⧠āύāĻŋāĻā§ āύāĻžāĻŽāĻž
Pop root-āĻāĻž āϏāϰāĻŋāϝāĻŧā§ āĻĻā§āϝāĻŧ, āĻāϰ heap-āĻā§ āĻĢāĻžāĻāĻāĻāĻž āĻāϰāĻžāϤ⧠āĻšāϝāĻŧ āĻāϰ āĻāĻĨāĻž āύāĻž āĻā§āĻā§āĨ¤ āĻāϝāĻŧāĻāĻž push āϝ⧠heap āĻŦāĻžāύāĻžāϞ, āϤāĻžāϰ āĻāĻĒāϰ āĻĻā§āĻāĻāĻž pop āĻĻā§āĻā§āĨ¤
āĻĒā§āϰāϤāĻŋāĻāĻž pop āĻļā§āώ āĻŽāĻžāύāĻāĻžāĻā§ slot 0-āĻ āĻāύā§āĻā§, āĻāĻžāϰāĻŖ vector āĻāϰ āĻļā§āώ slot-āĻāĻž āϏāϏā§āϤāĻžāϝāĻŧ āĻā§āĻĄāĻŧā§ āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϤāĻžāϰāĻĒāϰ āĻŽāĻžāύāĻāĻž āύā§āĻŽā§āĻā§: āĻŦāĻĄāĻŧ child-āĻāĻž āϝāϤāĻā§āώāĻŖ āĻāϰ āĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧ, āϤāϤāĻā§āώāĻŖ āĻĻā§āĻāύ swap āĻāϰā§āĻā§, āĻāϰ āĻāĻ āϧāĻžāĻĒā§āϰ āύāĻžāĻŽ sift downāĨ¤ āĻŦāĻĄāĻŧ child-āĻāĻžāĻ āĻāĻĒāϰ⧠āĻāĻ ā§, āϤāĻžāĻ heap-āĻāϰ āĻāĻĨāĻž āϰāĻā§āώāĻž āĻšāϝāĻŧāĨ¤ āϤāĻžāĻ push-āĻāϰ āĻŽāϤ⧠pop-āĻ āĻāĻāĻāĻž āĻŽāĻžāύāĻā§ āĻŦāĻĄāĻŧāĻā§āϰ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ log2 n level āĻĒāĻžāϰ āĻāϰāĻžāϝāĻŧāĨ¤
āĻĒā§āϰāϤāĻŋāĻāĻž āĻĒā§āϰ⧠push āĻŦāĻž pop-āĻāϰ āĻĒāϰ⧠widget āĻĻā§āĻā§ āĻĻā§āĻāĻžāϝāĻŧ āĻ āĻŋāĻ āϏā§āĻ vector, āϝā§āĻāĻž Compiler Explorer-āĻ GCC 12-āĻāϰ priority_queue-āĻāϰ āĻā§āϤāϰ⧠āĻāĻŋāϞāĨ¤ Pop-āĻāϰ āĻā§āϤāϰ⧠library āĻāĻāĻāĻž shortcut āύā§āϝāĻŧ, āϝā§āĻāĻž āĻāĻāĻ vector-āĻ āĻāĻŋāϝāĻŧā§ āĻĒā§āĻāĻāĻžāϝāĻŧ; āϏā§āĻāĻž āĻĻā§āĻāĻžāĻŦā§ lesson 05āĨ¤ āϤāĻžāĻ āĻāĻ āĻāĻŦāĻŋāĻā§āϞ⧠āĻāϏāϞ layout-āĻ āĻĻā§āĻāĻžāϝāĻŧāĨ¤
āĻĒā§āϰāĻĨāĻŽ āĻĻāĻŋāύā§āĻ āϝ⧠syntax āϞāĻžāĻāĻŦā§
std::priority_queue āĻāϰ āĻāϰ āϰā§āĻāĻāĻžāϰ call-āĻā§āϞā§
#include <queue>
priority_queue<T> pq; an empty priority_queue of T
pq.push(x); add x; it climbs to its place
pq.top() the largest element; it stays in
pq.pop(); remove the largest; returns nothing
pq.size() pq.empty() how many, and whether there are none
#include <functional> for greater
#include <vector>
priority_queue<T, vector<T>, greater<T>> small;
the smallest on top instead
priority_queue<T>: angle bracket-āĻ āĻāĻāĻāĻžāĻ āĻāĻŋāύāĻŋāϏ, element-āĻāϰ type, āĻ āĻŋāĻ vector-āĻāϰ āĻŽāϤā§āĨ¤ āĻāĻāĻž āĻĨāĻžāĻā§<queue>-āĻ, queue-āĻāϰ āĻĒāĻžāĻļā§āĻāĨ¤push,topāĻāϰpop: stack-āĻāϰ āϏā§āĻ āϤāĻŋāύāĻāĻž āύāĻžāĻŽāĻ, āĻļā§āϧā§topāĻā§āύ element āĻĻā§āĻāĻžāĻŦā§, āϤāĻžāϰ āύāĻŋāϝāĻŧāĻŽāĻāĻž āĻāϞāĻžāĻĻāĻžāĨ¤top()āĻāϰpop(): āĻļā§āϧ⧠priority_queue āĻāĻžāϞāĻŋ āύāĻž āĻĨāĻžāĻāϞā§āĨ¤ āĻāĻā§empty()check āĻāϰā§āĨ¤greater<T>: āĻā§āϰāĻŽāĻāĻž āĻāϞā§āĻā§ āĻĻā§āϝāĻŧ, āϤāĻžāĻ top-āĻ āĻĨāĻžāĻā§ āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āĻāĻāĻžāĨ¤ Angle bracket-āĻāϰ āϤāĻŋāύāĻāĻž āĻāĻŋāύāĻŋāϏ āĻŦā§āĻāĻŋāϝāĻŧā§ āĻŦāϞāĻŦā§ lesson 02āĨ¤
āϤāĻžāĻ priority_queue-āĻāϰ āĻāĻžāĻā§āϰ call āϤāĻŋāύāĻāĻž, stack-āĻāϰ āĻŽāϤā§āĻ push, top āĻāϰ pop, āĻāϰ top() āϏāĻŦāϏāĻŽāϝāĻŧ āĻĻā§āĻāĻžāϝāĻŧ āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻžāĨ¤
push, top āĻāϰ pop
push(x) x-āĻā§ heap-āĻ āĻĸā§āĻāĻžāϝāĻŧāĨ¤ top() āĻŦāϞ⧠āĻāĻ āĻŽā§āĻšā§āϰā§āϤ⧠āĻā§āϤāϰā§āϰ āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧ āĻŽāĻžāύ āĻā§āύāĻāĻž, āĻāϰ pop() āϏā§āĻāĻž āϏāϰāĻŋāϝāĻŧā§ āĻĻā§āϝāĻŧāĨ¤ āĻāĻ program āĻĒā§āϰāϤāĻŋāĻāĻž āĻŦāĻĻāϞā§āϰ āĻĒāϰ⧠top āĻāϰ size print āĻāϰā§āĨ¤
#include <iostream>
#include <queue>
using namespace std;
int main() {
priority_queue<int> pq;
pq.push(4);
pq.push(9);
pq.push(2);
cout << "top " << pq.top() << ", size " << pq.size() << '\n';
pq.pop();
cout << "top " << pq.top() << ", size " << pq.size() << '\n';
pq.push(7);
cout << "top " << pq.top() << ", size " << pq.size() << '\n';
return 0;
}
top 9, size 3
top 4, size 2
top 7, size 3
Pop-āĻāϰ āĻĒāϰ⧠top āĻšāϞ⧠4, āĻāĻžāϰāĻŖ āĻŦāĻžāĻāĻŋāĻĻā§āϰ āĻŽāϧā§āϝ⧠āĻāĻāĻžāĻ āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĨ¤ āϤāĻžāϰāĻĒāϰ 7 āĻāϞ, āĻāϰ āĻĒā§āϰā§āύ⧠4-āĻā§ āĻāĻĒāĻā§ āϏā§āĻāĻž top-āĻ āĻāϞ⧠āĻā§āϞāĨ¤ āϤāĻžāĻ top() āϏāĻŦāϏāĻŽāϝāĻŧ āĻāĻŦāĻžāĻŦ āĻĻā§āϝāĻŧ āĻā§āϤāϰ⧠āĻĨāĻžāĻāĻž āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧ āĻŽāĻžāύāĻāĻž āĻĻāĻŋāϝāĻŧā§, āϏā§āĻāĻž āϝāĻāύāĻ āĻāϏā§āĻāĨ¤
pop āĻāĻŋāĻā§āĻ āĻĢā§āϰāϤ āĻĻā§āϝāĻŧ āύāĻž: āĻāĻā§ āĻĒāĻĄāĻŧā§, āϤāĻžāϰāĻĒāϰ pop
Bob āĻāĻ āϞāĻžāĻāύā§āĻ āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧ āĻŽāĻžāύāĻāĻž āύāĻŋāϤ⧠āĻāϰ āϏāϰāĻžāϤ⧠āĻāĻžāϝāĻŧ, āϤāĻžāĻ āĻ āϞā§āĻā§ āĻāĻāĻžāĨ¤
priority_queue<int> pq;
pq.push(4);
int x = pq.pop();
Runner-āĻāϰ flag-āĻ GCC 12 āĻĨā§āĻŽā§ āϝāĻžāϝāĻŧ error: void value not ignored as it ought to be āĻĻāĻŋāϝāĻŧā§āĨ¤ void āĻŽāĻžāύ⧠"āĻā§āύ⧠āĻŽāĻžāύ āύāĻž": pop() top-āĻāĻž āϏāϰāĻžāϝāĻŧ, āĻāĻŋāύā§āϤ⧠āĻšāĻžāϤ⧠āĻāĻŋāĻā§āĻ āĻĢā§āϰāϤ āĻĻā§āϝāĻŧ āύāĻž, āĻ āĻŋāĻ Module 6-āĻāϰ stack-āĻāϰ pop()-āĻāϰ āĻŽāϤā§āĨ¤ āϏāĻŽāĻžāϧāĻžāύ āĻĻā§āĻ āϞāĻžāĻāύā§āϰ: āĻāĻā§ āĻāĻāĻāĻž read, āϤāĻžāϰāĻĒāϰ āĻāĻāĻāĻž popāĨ¤
#include <iostream>
#include <queue>
using namespace std;
int main() {
priority_queue<int> pq;
pq.push(4);
pq.push(9);
pq.push(2);
int x = pq.top();
pq.pop();
cout << "took " << x << ", now the top is " << pq.top() << '\n';
return 0;
}
took 9, now the top is 4
āϤāĻžāĻ Module 6-āĻāϰ āĻā§āĻĄāĻŧāĻžāĻāĻžāĻ āĻĨāĻžāĻāĻā§: āĻāĻā§ top() āĻĻāĻŋāϝāĻŧā§ āĻĻā§āĻā§, āϤāĻžāϰāĻĒāϰ pop()āĨ¤
āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āĻāĻāĻž āĻāĻā§, āĻāĻ āϞāĻžāĻāύā§
āĻāĻŋāĻā§ āĻāĻžāĻā§ āĻāĻā§ āϞāĻžāĻā§ āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āĻāĻāĻž: āϏāĻŦāĻā§āϝāĻŧā§ āϏāϏā§āϤāĻž āĻāĻžāĻĄāĻŧāĻž, āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻŽ āĻ
āĻĒā§āĻā§āώāĻžāĨ¤ āϤāĻāύ priority_queue-āĻāϰ angle bracket-āĻ āĻāϰāĻ āĻĻā§āĻāĻāĻž āĻāĻŋāύāĻŋāϏ āĻĻāĻžāĻ: āĻā§āϤāϰ⧠āϝ⧠vector āϰāĻžāĻāĻŦā§ āϏā§āĻāĻž, āĻāϰ greater<int>, āϝā§āĻāĻž āĻā§āϰāĻŽ āĻāϞā§āĻā§ āĻĻā§āϝāĻŧāĨ¤ āĻĻā§āĻā§āĻ āĻŦā§āĻāĻŋāϝāĻŧā§ āĻŦāϞāĻŦā§ lesson 02; āĻāĻĒāĻžāϤāϤ āϞāĻžāĻāύāĻāĻž āĻšā§āĻŦāĻšā§ āϞā§āĻā§āĨ¤
#include <functional>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main() {
priority_queue<int, vector<int>, greater<int>> pq;
for (int x : {4, 9, 2, 7, 5, 8}) {
pq.push(x);
}
cout << "smallest first:";
while (!pq.empty()) {
cout << ' ' << pq.top();
pq.pop();
}
cout << '\n';
return 0;
}
smallest first: 2 4 5 7 8 9
while (!pq.empty()) loop-āĻāĻž top āĻĒāĻĄāĻŧā§, print āĻāϰā§, pop āĻāϰā§, āϝāϤāĻā§āώāĻŖ āύāĻž āĻāĻŋāĻā§āĻ āĻŦāĻžāĻāĻŋ āĻĨāĻžāĻā§; āĻāĻŽāύ loop-āĻā§ āĻŦāϞ⧠draināĨ¤ āϤāĻžāĻ āĻāĻāĻā§ āϞāĻŽā§āĻŦāĻž āĻāĻāĻāĻž declaration āĻĻāĻŋāϞā§āĻ heap āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻžāϰ āĻŦāĻĻāϞ⧠āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āĻāĻāĻž āĻāĻā§ āĻĻā§āϝāĻŧ, āĻāϰ āĻĒā§āϰāϤāĻŋāĻāĻž call āĻāĻāĻ āĻĨāĻžāĻā§āĨ¤
āĻāĻžāϞāĻŋ priority_queue: Zara-āϰ āĻĒā§āϰāĻĨāĻŽ test
Zara āϏāĻŦāϏāĻŽāϝāĻŧ āĻāĻžāϞāĻŋ case āĻāĻā§ āĻāĻžāϞāĻžāϝāĻŧāĨ¤ āĻ āĻāĻāĻāĻž āĻāĻžāϞāĻŋ priority_queue-āĻā§ āĻāϰ top āĻāĻŋāĻā§āĻā§āϏ āĻāϰā§āĨ¤
priority_queue<int> pq;
cout << "top: " << pq.top() << '\n';
Runner-āĻāϰ flag-āĻ āĻāĻāĻž āĻā§āύ⧠āĻŦāĻžāϰā§āϤāĻž āĻāĻžāĻĄāĻŧāĻžāĻ compile āĻšāϝāĻŧā§āĻā§āĨ¤ Compiler Explorer-āĻāϰ GCC 12.2-āĻ āĻāĻāĻŦāĻžāϰ āĻāĻžāϞāĻžāϤ⧠program āĻāĻŋāĻā§āĻ print āĻāϰā§āύāĻŋ, crash āĻāϰā§āĻā§ SIGSEGV āĻĻāĻŋāϝāĻŧā§, āϝ⧠signal āĻāϏ⧠āύāĻŋāĻā§āϰ āύāĻž āĻāĻŽāύ memory āĻĒāĻĄāĻŧāϤ⧠āĻā§āϞā§āĨ¤ āĻāĻŽāύāĻāĻŋ top: -āĻ āĻāϏā§āύāĻŋ, āĻāĻžāϰāĻŖ āĻāĻāĻž āϤāĻāύ⧠cout-āĻāϰ āĻāĻžāĻā§ āϧāϰāĻž āĻāĻŋāϞāĨ¤ āϤāĻžāϰāĻĒāϰ āĻ āĻāĻāĻāĻž āĻāĻžāϞāĻŋ priority_queue pop āĻāϰā§āĨ¤
priority_queue<int> pq;
pq.pop();
cout << "size after pop: " << pq.size() << '\n';
āϏā§āĻŦāĻžāϰ print āĻšāϝāĻŧā§āĻā§ size after pop: 18446744073709551615, āĻāϰ program āϏā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻāĻāĻžāĻŦā§āĻ āĻļā§āώ āĻšāϝāĻŧā§āĻā§āĨ¤ Pop āĻā§āϤāϰā§āϰ vector-āĻāϰ āĻļā§āώāĻāĻžāĻā§ āĻāϰ āĻļā§āϰā§āϰāĻ āύāĻŋāĻā§ āύāĻžāĻŽāĻŋāϝāĻŧā§ āĻĻāĻŋāϝāĻŧā§āĻā§, āϤāĻžāĻ size āĻā§āϰ⧠āĻāĻŋāϝāĻŧā§ āĻšāϝāĻŧā§ āĻā§āĻā§ āĻāϰ āĻĒāĻā§āώ⧠āϏāĻŽā§āĻāĻŦ āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧ āϏāĻāĻā§āϝāĻžāĨ¤ āĻāϰāĻĒāϰ āĻāĻāĻāĻž push(7) āĻāϰ āĻāĻāĻāĻž top() SIGSEGV āĻĻāĻŋāϝāĻŧā§ crash āĻāϰā§āĻā§āĨ¤ āĻĻā§āĻā§āĻ undefined behaviour: āĻā§ āĻšāĻŦā§, C++ standard āĻāĻŋāĻā§āĻ āĻŦāϞ⧠āύāĻžāĨ¤ āϤāĻžāĻ āϝ⧠top() āĻŦāĻž pop()-āĻāϰ input āϤā§āĻŽāĻžāϰ āĻšāĻžāϤ⧠āύā§āĻ, āϤāĻžāϰ āĻāĻā§ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ if (!pq.empty()) āϞā§āĻā§āĨ¤
āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āĻ priority_queue program: āϤāĻŋāύāĻāĻž push, āϤāĻžāϰāĻĒāϰ āĻāĻāĻāĻž draināĨ¤
#include <iostream>
#include <queue>
using namespace std;
int main() {
priority_queue<int> pq;
pq.push(5);
pq.push(1);
pq.push(8);
while (!pq.empty()) {
cout << "pop " << pq.top() << '\n';
pq.pop();
}
return 0;
}
pop 8
pop 5
pop 1
āĻŽāĻžāύāĻā§āϞ⧠āĻĸā§āĻā§āĻāĻŋāϞ 5, 1, 8 āĻā§āϰāĻŽā§, āĻāϰ āĻŦā§āϰā§āϞ 8, 5, 1 āĻā§āϰāĻŽā§: āĻā§āϰāĻŽ āĻ āĻŋāĻ āĻāϰā§āĻā§ āĻļā§āϧ⧠āĻāĻĻā§āϰ āĻŽāĻžāĻĒāĨ¤ Loop-āĻāϰ āĻļāϰā§āϤ !pq.empty() āĻāϏāϞ⧠loop-āĻāϰ āĻā§āϤāϰā§āĻ āĻŦāϏāĻžāύ⧠Zara-āϰ check, āϤāĻžāĻ top() āĻāĻāύ⧠āĻāĻžāϞāĻŋ heap āĻĒāĻžāϝāĻŧ āύāĻžāĨ¤
āĻĒā§āϰāϤāĻŋāĻāĻž āĻā§āϞā§āϝāĻŧāĻžāĻĄāĻŧ āĻā§āϞāĻž āĻļā§āώ āĻāϰāϞā§āĻ Kenji āϤāĻžāϰ score push āĻāϰā§, āĻāϰ āĻāĻāύ āĻĒāϰā§āϝāύā§āϤ āϏā§āϰāĻžāĻāĻž print āĻāϰā§āĨ¤ āĻļā§āώ⧠āϏā§āϰāĻž āĻā§āϞā§āϝāĻŧāĻžāĻĄāĻŧ āĻŦāĻžāĻĄāĻŧāĻŋ āĻāϞ⧠āϝāĻžāϝāĻŧāĨ¤
#include <iostream>
#include <queue>
using namespace std;
int main() {
priority_queue<int> scores;
for (int s : {120, 340, 90, 410, 275}) {
scores.push(s);
cout << "pushed " << s << ", best so far " << scores.top() << '\n';
}
scores.pop();
cout << "the best player leaves; next best " << scores.top() << '\n';
return 0;
}
pushed 120, best so far 120
pushed 340, best so far 340
pushed 90, best so far 340
pushed 410, best so far 410
pushed 275, best so far 410
the best player leaves; next best 340
Kenji āĻŦāϞā§, āϏā§āϰāĻž score āϤ⧠āĻāĻāĻāĻž variable āĻĻāĻŋāϝāĻŧā§āĻ āϰāĻžāĻāĻž āϝāĻžāϝāĻŧāĨ¤ āĻ āĻŋāĻ, āϝāϤāĻā§āώāĻŖ āύāĻž āϏā§āϰāĻž āĻā§āϞā§āϝāĻŧāĻžāĻĄāĻŧ āĻāϞ⧠āϝāĻžāϝāĻŧ: heap āϤāĻāύāĻ āĻāĻžāύ⧠āĻĒāϰā§āϰ āϏā§āϰāĻžāĻāĻž, 340āĨ¤ āϤāĻžāĻ heap-āĻāϰ āĻāϏāϞ āĻāĻžāĻ āĻļā§āϰ⧠āĻšāϝāĻŧ āϝāĻāύ āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻžāĻ āĻŦāĻŋāĻĻāĻžāϝāĻŧ āύā§āϝāĻŧāĨ¤
Run in Compiler< āĻĻāĻŋāϝāĻŧā§ āϤā§āϞāύāĻž āĻāϰāĻž āϝāĻžāϝāĻŧ āĻāĻŽāύ āϝā§āĻā§āύ⧠type āύāĻŋāϝāĻŧā§āĻ priority_queue āĻāĻžāĻ āĻāϰā§āĨ¤ String-āĻāϰ āĻŦā§āϞāĻžāϝāĻŧ < āĻŽāĻžāύ⧠āĻ
āĻāĻŋāϧāĻžāύā§āϰ āĻā§āϰāĻŽ, Module 3-āĻāϰ lesson 02 āϝā§āĻŽāύ āĻĻā§āĻāĻŋāϝāĻŧā§āĻāĻŋāϞāĨ¤
#include <iostream>
#include <queue>
#include <string>
using namespace std;
int main() {
priority_queue<string> words;
words.push("pear");
words.push("apple");
words.push("fig");
words.push("banana");
cout << "largest first:";
while (!words.empty()) {
cout << ' ' << words.top();
words.pop();
}
cout << '\n';
return 0;
}
largest first: pear fig banana apple
Maria āĻāĻŋāĻā§āĻā§āϏ āĻāϰā§, pear āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧ āĻšāϞ⧠āĻā§āύ? String-āĻāϰ āϤā§āϞāύāĻž āĻšāϝāĻŧ āĻ
āĻā§āώāϰ⧠āĻ
āĻā§āώāϰā§, āĻāϰ p āĻāϏ⧠b, f āĻāϰ a-āϰ āĻĒāϰā§, āϤāĻžāĻ āĻ
āĻāĻŋāϧāĻžāύ⧠pear āϏāĻŦāĻžāϰ āĻļā§āώā§āĨ¤ āϤāĻžāĻ "āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧ" āĻŽāĻžāύ⧠āϏāĻŦāϏāĻŽāϝāĻŧ "< āϝ⧠āĻā§āϰāĻŽ āĻĻā§āϝāĻŧ, āϤāĻžāϤ⧠āϏāĻŦāĻžāϰ āĻļā§āώā§", type āϝāĻž-āĻ āĻšā§āĻāĨ¤
āĻāĻāĻāύ beginner āĻāϏāϞ⧠āϝ⧠program āϞāĻŋāĻāϤ: āύāĻŽā§āĻŦāϰāĻā§āϞ⧠āĻĒāĻĄāĻŧā§, āĻĒā§āϰāϤāĻŋāĻāĻž push āĻāϰā§, āϤāĻžāϰāĻĒāϰ heap-āĻāĻž drain āĻāϰ⧠āϏāĻŦāĻā§āϝāĻŧā§ āĻŦā§āĻļāĻŋ āύāĻŽā§āĻŦāϰ āĻĨā§āĻā§ print āĻāϰā§āĨ¤ Input-āĻ āĻāĻā§ āĻĨāĻžāĻā§ āĻāϝāĻŧāĻāĻž āύāĻŽā§āĻŦāϰ, āϤāĻžāϰāĻĒāϰ āύāĻŽā§āĻŦāϰāĻā§āϞā§āĨ¤
#include <iostream>
#include <queue>
using namespace std;
int main() {
int n;
cin >> n;
priority_queue<int> marks;
for (int i = 0; i < n; i++) {
int m;
cin >> m;
marks.push(m);
}
int place = 1;
while (!marks.empty()) {
cout << place << ". " << marks.top() << '\n';
marks.pop();
place++;
}
return 0;
}
1. 92
2. 92
3. 88
4. 81
5. 75
6. 67
7. 59
āĻĻā§āĻāĻāĻž 92-āĻ āĻŦā§āϰāĻŋāϝāĻŧā§āĻā§: heap āϏāĻŽāĻžāύ āĻŽāĻžāύāĻā§āϞā§āĻ āϰā§āĻā§ āĻĻā§āϝāĻŧāĨ¤ āϏāĻŦ push āĻāϰ⧠āϤāĻžāϰāĻĒāϰ drain āĻāϰāϞ⧠āĻŽāĻžāύāĻā§āϞ⧠āĻŦāĻĄāĻŧ āĻĨā§āĻā§ āĻā§āĻ āĻā§āϰāĻŽā§ sort āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ, āĻāϰ āĻāĻāĻŦāĻžāϰ sort call āĻāϰāĻžāϰ āϏāĻžāĻĨā§ āĻāϰ āϤā§āϞāύāĻž āĻŽā§āĻĒā§ āĻĻā§āĻāĻžāĻŦā§ lesson 04āĨ¤
Run in CompilerāĻāĻāĻž āĻā§āĻĨāĻžāϝāĻŧ āĻāĻžāĻā§ āϞāĻžāĻā§
- Python-āĻāϰ heapq module. āĻ āĻāĻāĻāĻž āϏāĻžāϧāĻžāϰāĻŖ Python list-āĻ heap āϰāĻžāĻā§, āϝā§āĻāĻžāύ⧠āĻĒā§āϰāϤāĻŋāĻāĻž parent āĻāϰ child-āĻĻā§āϰ āĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧ āύāĻžāĨ¤ āϤāĻžāĻ āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āĻ item-āĻāĻž āϏāĻŦāϏāĻŽāϝāĻŧ āĻĨāĻžāĻā§
heap[0]-āĻāĨ¤ - Java-āϰ java.util.PriorityQueue. āĻāϰ documentation āĻŦāϞā§, āĻāĻāĻž āĻāĻāĻāĻž priority heap-āĻāϰ āĻāĻĒāϰ āĻŦāĻžāύāĻžāύā§, āĻāϰ āĻāϰ head āĻšāϞ⧠āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āĻ elementāĨ¤ āϤāĻžāĻ Java default-āĻ āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āĻāĻāĻž āĻāĻā§ āĻĻā§āϝāĻŧ, C++-āĻāϰ āĻ āĻŋāĻ āĻāϞā§āĻā§āĨ¤
- libuv, Node.js-āĻāϰ āύāĻŋāĻā§āϰ event-loop library. āĻ āĻāĻžāϞ⧠āĻĨāĻžāĻāĻž āĻĒā§āϰāϤāĻŋāĻāĻž timer āĻāĻāĻāĻž heap-āĻ āϰāĻžāĻā§, āĻā§āύāĻāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻā§ āĻšāĻŦā§ āϏā§āĻ āĻā§āϰāĻŽā§āĨ¤ Loop āĻāϤāĻā§āώāĻŖ āĻā§āĻŽāĻžāϤ⧠āĻĒāĻžāϰāĻŦā§, āϏā§āĻāĻž āĻāĻžāύāϤ⧠āĻ top-āĻāĻž āĻĒāĻĄāĻŧā§āĨ¤
āϝ⧠āĻā§āϞāĻā§āϞ⧠āϏāĻŦāĻžāĻ āĻāϰā§
ā§§. Header āϞāĻŋāĻāϤ⧠āĻā§āϞ⧠āϝāĻžāĻāϝāĻŧāĻžāĨ¤
#include <iostream>
using namespace std;
int main() {
priority_queue<int> pq;
pq.push(5);
cout << pq.top() << '\n';
return 0;
}
Runner-āĻāϰ flag-āĻ error: error: 'priority_queue' was not declared in this scope, āϤāĻžāϰāĻĒāϰ GCC 12 āύāĻŋāĻā§āĻ āϏāĻŽāĻžāϧāĻžāύ āĻŦāϞ⧠āĻĻā§āϝāĻŧ: note: 'std::priority_queue' is defined in header '<queue>'; did you forget to '#include <queue>'?āĨ¤ <priority_queue> āύāĻžāĻŽā§ āĻā§āύ⧠header āύā§āĻ: āĻ āĻĨāĻžāĻā§ queue-āĻāϰ āϏāĻžāĻĨā§ āĻāĻāĻ <queue>-āĻāĨ¤ āϤā§āĻŽāĻŋ āĻāĻāĻž āĻā§āϞāĻŦā§, āĻāĻžāϰāĻŖ āύāĻžāĻŽāĻāĻž āĻļā§āύ⧠āĻŽāύ⧠āĻšāϝāĻŧ āĻāϰ āύāĻŋāĻā§āϰ āĻāϞāĻžāĻĻāĻž āĻāĻāĻāĻž header āĻāĻā§āĨ¤
⧍. Queue-āĻāϰ āĻŽāϤ⧠āϏāĻžāĻŽāύā§āϰāĻāĻž āĻĻā§āĻāϤ⧠āĻāĻžāĻāϝāĻŧāĻžāĨ¤
priority_queue<int> pq;
pq.push(5);
cout << pq.front() << '\n';
Runner-āĻāϰ flag-āĻ error: error: 'class std::priority_queue<int>' has no member named 'front', āĻā§āύ⧠"did you mean" āĻāĻžāĻĄāĻŧāĻžāĻāĨ¤ āĻāϰ āĻĻā§āĻāĻžāϰ call āĻāĻāĻāĻžāĻ, top()āĨ¤ āϤā§āĻŽāĻŋ front() āϞāĻŋāĻāĻŦā§, āĻāĻžāϰāĻŖ āύāĻžāĻŽā§āϰ āĻļā§āώ⧠queue āĻāĻā§āĨ¤
ā§Š. āĻāĻžāĻā§āϰ āĻĻāϰāĻāĻžāϰ āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āĻāĻāĻž, āĻ āĻĨāĻ āĻāĻā§ āĻāϏ⧠āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻžāĨ¤
priority_queue<int> fares;
fares.push(30);
fares.push(12);
fares.push(45);
cout << "cheapest fare first:";
while (!fares.empty()) {
cout << ' ' << fares.top();
fares.pop();
}
cout << '\n';
āĻā§āύ⧠command line-āĻāĻ āĻā§āύ⧠āĻŦāĻžāϰā§āϤāĻž āύā§āĻ, āĻāϰ print āĻšāϝāĻŧ cheapest fare first: 45 30 12āĨ¤ Variable-āĻāϰ āύāĻžāĻŽ āϝāĻž-āĻ āĻšā§āĻ, āϏāĻžāϧāĻžāϰāĻŖ priority_queue āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻžāĻā§āĻ top-āĻ āϰāĻžāĻā§; āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āĻāĻāĻžāϰ āĻāύā§āϝ greater<int> āĻĻāĻŋāϝāĻŧā§ declare āĻāϰā§āĨ¤ Java āĻŦāĻž Python-āĻāϰ āĻĒāϰ⧠āϤā§āĻŽāĻŋ āĻāĻ āĻā§āϞāĻāĻž āĻāϰāĻŦā§, āĻāĻžāϰāĻŖ āĻāĻāĻžāύ⧠default-āĻ āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āĻāĻāĻž āĻāĻā§ āĻāϏā§āĨ¤
Maria-āϰ help desk-āĻ āĻĒā§āϰāϤāĻŋāĻāĻž report-āĻāϰ urgency 1 āĻĨā§āĻā§ 1000-āĻāϰ āĻŽāϧā§āϝā§, āĻāϰ āύāĻŽā§āĻŦāϰ āϝāϤ āĻŦāĻĄāĻŧ, āϤāϤ āĻāϰā§āϰāĻŋāĨ¤ Maria āĻĢāĻžāĻāĻāĻž āĻšāϞ⧠āĻā§āϞāĻž report-āĻā§āϞā§āϰ āĻŽāϧā§āϝ⧠āϏāĻŦāĻā§āϝāĻŧā§ āĻāϰā§āϰāĻŋāĻāĻž āύā§āϝāĻŧ, āϏā§āĻāĻž āϝāĻāύāĻ āĻāϏā§āĻāĨ¤ āĻŽāĻžāĻā§ āĻŽāĻžāĻā§ āĻ āĻĻā§āĻāϤ⧠āĻāϏā§, āϝāĻāύ āĻā§āύ⧠report-āĻ āĻā§āϞāĻž āύā§āĻāĨ¤
Input. āĻāĻ āϞāĻžāĻāύ⧠n, āϤāĻžāϰāĻĒāϰ n-āĻāĻž command, āĻĒā§āϰāϤāĻŋ āϞāĻžāĻāύ⧠āĻāĻāĻāĻžāĨ¤ add U urgency U-āϰ āĻāĻāĻāĻž report āĻā§āϞā§, āĻāϰ take āϏāĻŦāĻā§āϝāĻŧā§ āĻāϰā§āϰāĻŋ āĻā§āϞāĻž report-āĻāĻž āύā§āϝāĻŧ, āϝā§āĻāĻž āϤāĻāύ āĻŦāύā§āϧ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧāĨ¤
Output. āĻĒā§āϰāϤāĻŋāĻāĻž take-āĻāϰ āĻāύā§āϝ āĻāĻ āϞāĻžāĻāύ: āϝ⧠urgency āύā§āĻāϝāĻŧāĻž āĻšāϞ⧠āϏā§āĻāĻž, āĻāϰ āĻā§āύ⧠report āĻā§āϞāĻž āύāĻž āĻĨāĻžāĻāϞ⧠none āĻļāĻŦā§āĻĻāĻāĻžāĨ¤ āϤāĻžāϰāĻĒāϰ āĻāĻāĻĻāĻŽ āĻļā§āώ⧠āĻāĻ āϞāĻžāĻāύ: āϝ⧠urgency-āĻā§āϞ⧠āĻāĻāύ⧠āĻā§āϞāĻž, āϏāĻŦāĻā§āϝāĻŧā§ āĻŦā§āĻļāĻŋ āĻĨā§āĻā§ āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻŽ, āĻŽāĻžāĻā§ āĻāĻāĻāĻž āĻāϰ⧠space, āĻāϰ āĻāĻŋāĻā§ āύāĻž āĻĨāĻžāĻāϞ⧠empty āĻļāĻŦā§āĻĻāĻāĻžāĨ¤
Constraints. 1 <= n <= 100000āĨ¤ 1 <= U <= 1000, āĻāϰ āĻĻā§āĻāĻāĻž report-āĻāϰ urgency āϏāĻŽāĻžāύ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
Sample. Input 8, āϤāĻžāϰāĻĒāϰ take, add 5, add 9, add 2, take, add 7, take, add 4 āĻĻāĻŋāϞ⧠none, 9, 7 āĻāϰ 5 4 2āĨ¤ āĻĒā§āϰāĻĨāĻŽ take āĻāĻŋāĻā§āĻ āĻā§āϞāĻž āĻĒāĻžāϝāĻŧ āύāĻž, āĻāϰ 9 āĻāϞ⧠āϝāĻžāϝāĻŧ āĻĒā§āϰā§āύ⧠5-āĻāϰ āĻāĻā§āĨ¤
#include <iostream>
#include <queue>
#include <string>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n = 0;
cin >> n;
priority_queue<int> reports;
for (int i = 0; i < n; i++) {
string op;
cin >> op;
if (op == "add") {
int urgency = 0;
cin >> urgency;
// Add the new report's urgency to reports.
} else {
// op is "take": print the highest urgency and remove it,
// or print none if no report is open.
}
}
// Print the urgencies still open, from the highest to the lowest,
// separated by single spaces, or the word empty if none is left.
return 0;
}
help-desk āύāĻžāĻŽā§ grade āĻšāϝāĻŧāĨ¤ āĻāĻāĻž āĻāĻ module-āĻāϰ problem set-āĻāϰ āĻāĻāĻāĻž free problemāĨ¤ Hidden test-āĻ āĻāĻā§ āĻā§āύ⧠report āĻāϏāĻžāϰ āĻāĻā§āĻ āĻāĻāĻāĻž take, āĻāĻŽāύ āĻāĻāĻāĻž report āϝā§āĻāĻž āĻāĻāύ⧠āύā§āĻāϝāĻŧāĻž āĻšāϝāĻŧ āύāĻž, āĻāϰ āϏāĻŽāĻžāύ urgencyāĨ¤ āĻāϰāĻ āĻāĻā§ āĻāĻŽāύ āĻāĻāĻāĻž run, āϝāĻžāϰ āĻļā§āώ⧠āϏāĻŦ report āύā§āĻāϝāĻŧāĻž āĻšāϝāĻŧā§ āĻā§āĻā§, āĻāϰ 100000āĻāĻž commandāĨ¤
āĻāĻŦāĻŋ āϤā§āϞāĻžāϰ āĻāύā§āϝ Alice āĻā§āϞāĻžāϏā§āϰ āϏāĻŦāĻžāĻāĻā§ āĻāĻāĻāĻžāĻŦāĻžāĻāĻāĻž āĻāϰ⧠āĻĻāĻžāĻāĻĄāĻŧ āĻāϰāĻžāϝāĻŧāĨ¤ āϏāĻŦāĻžāϰ āĻāĻā§ āĻĻāĻžāĻāĻĄāĻŧāĻžāϝāĻŧ āϏāĻŦāĻā§āϝāĻŧā§ āϞāĻŽā§āĻŦāĻž āĻāύ, āϤāĻžāϰāĻĒāϰ āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻžāĻā§ āĻāύ, āϤāĻžāϰāĻĒāϰ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āϞāĻŽā§āĻŦāĻž, āϤāĻžāϰāĻĒāϰ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āĻāĻžāĻā§, āĻāĻāĻžāĻŦā§ āĻāϞāϤ⧠āĻĨāĻžāĻā§āĨ¤ āϏāĻžāϰāĻŋāϤ⧠āĻĒā§āϰāϤā§āϝā§āĻā§ āĻ āĻŋāĻ āĻāĻāĻŦāĻžāϰ āĻāϰ⧠āĻĻāĻžāĻāĻĄāĻŧāĻžāϝāĻŧāĨ¤
Input. āĻāĻ āϞāĻžāĻāύ⧠n, āϤāĻžāϰāĻĒāϰ centimetre-āĻ n-āĻāĻž āĻāĻā§āĻāϤāĻžāĨ¤
Output. āĻāĻ āϞāĻžāĻāύ: Alice-āĻāϰ āĻā§āϰāĻŽā§ n-āĻāĻž āĻāĻā§āĻāϤāĻž, āĻŽāĻžāĻā§ āĻāĻāĻāĻž āĻāϰ⧠spaceāĨ¤
Constraints. 1 <= n <= 100000āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž āĻāĻā§āĻāϤāĻž 100 āĻĨā§āĻā§ 250-āĻāϰ āĻŽāϧā§āϝā§, āĻāϰ āĻĻā§āĻāύā§āϰ āĻāĻā§āĻāϤāĻž āϏāĻŽāĻžāύ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
Sample. Input 6 āĻāϰ 150 162 158 171 149 165 āĻĻāĻŋāϞ⧠171 149 165 150 162 158āĨ¤
#include <functional>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
priority_queue<int> tallest;
priority_queue<int, vector<int>, greater<int>> shortest;
for (int i = 0; i < n; i++) {
int h;
cin >> h;
// Push h into both heaps.
}
// Print n heights on one line, separated by single spaces: the tallest,
// then the shortest, then the next tallest, and so on. Every student
// stands in the row exactly once, so print exactly n heights.
return 0;
}
āĻāϞāĻžāĻĻāĻž āĻāϰ⧠grade āĻšāϝāĻŧ āύāĻžāĨ¤ āĻāĻāĻžāύ⧠āĻ āύā§āĻļā§āϞāύ āĻšāϝāĻŧ āĻĻā§āĻ āĻā§āϰāĻŽ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻāĻžāϞāĻžāύā§āϰ, āĻāϰ āĻā§āύ⧠āĻā§āύ⧠āĻ āĻŋāĻ āϏāĻŽāϝāĻŧā§ āĻĨāĻžāĻŽāĻžāϰ, āϝāĻžāϤ⧠āĻā§āĻ āĻĻā§āĻāĻŦāĻžāϰ āύāĻž āĻĻāĻžāĻāĻĄāĻŧāĻžāϝāĻŧāĨ¤
Run in CompilerāĻāĻāĻāĻž priority_queue āĻāĻāύ⧠āĻāϰ vector āĻĻā§āĻāĻžāϝāĻŧ āύāĻž, āϤāĻžāĻ David āύāĻŋāĻā§āĻ āĻāĻāĻ vector āĻŦāĻžāύāĻžāϝāĻŧ, push_back āĻāϰ āĻĒā§āϰāĻĨāĻŽ widget-āĻāϰ āĻāĻ āĻžāϰ āύāĻŋāϝāĻŧāĻŽ āĻĻāĻŋāϝāĻŧā§āĨ¤
Input. āĻāĻ āϞāĻžāĻāύ⧠n, āϤāĻžāϰāĻĒāϰ āϝ⧠n-āĻāĻž āĻŽāĻžāύ push āĻšāϞā§, āϏā§āĻ āĻā§āϰāĻŽā§āĨ¤
Output. āĻĒā§āϰāϤāĻŋāĻāĻž push-āĻāϰ āĻĒāϰ⧠āĻāĻ āϞāĻžāĻāύ: vector-āĻāĻž, slot 0 āĻāĻā§, āĻŽāĻžāĻā§ āĻāĻāĻāĻž āĻāϰ⧠spaceāĨ¤
Constraints. 1 <= n <= 1000āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž āĻŽāĻžāύ 1 āĻĨā§āĻā§ 1000000-āĻāϰ āĻŽāϧā§āϝā§, āĻāϰ āϏāĻŽāĻžāύ āĻĻā§āĻāĻāĻž āĻŽāĻžāύ swap āĻšāϝāĻŧ āύāĻžāĨ¤
Sample. Input 6 āĻāϰ 4 9 2 7 5 8 āĻĻāĻŋāϞ⧠āĻĒā§āϰāĻĨāĻŽ widget-āĻāϰ āĻāϝāĻŧāĻāĻž vector, āĻĒā§āϰāϤāĻŋ āϞāĻžāĻāύ⧠āĻāĻāĻāĻž: 4, 9 4, 9 4 2, 9 7 2 4, 9 7 2 4 5 āĻāϰ 9 7 8 4 5 2āĨ¤
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> heap;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
heap.push_back(x);
// x is now in the last slot. While it is larger than the value in
// its parent's slot, swap the two and move up to the parent's slot.
// Then print heap, slot 0 first, separated by single spaces.
}
return 0;
}
āĻāϞāĻžāĻĻāĻž āĻāϰ⧠grade āĻšāϝāĻŧ āύāĻžāĨ¤ Lesson āϝ⧠āĻāĻĨāĻžāĻāĻž āĻļā§āϧ⧠āĻāĻā§āĻāĻŋāϤ⧠āĻŦāϞā§āĻā§: slot-āĻā§āϞā§āϰ āĻāĻŦāĻŋāĨ¤ Slot 0-āĻāϰ āύāĻŋāĻā§ āĻā§āϞ⧠slot 1 āĻāϰ 2, 1-āĻāϰ āύāĻŋāĻā§ 3 āĻāϰ 4, āĻāϰ 2-āĻāϰ āύāĻŋāĻā§ 5 āĻāϰ 6āĨ¤ āĻā§āύ⧠slot-āĻāϰ parent āĻā§āύāĻāĻž, āϏā§āĻ āύāĻŋāϝāĻŧāĻŽāĻāĻž āĻā§āĻāĻā§ āĻŦā§āϰ āĻāϰā§, āϤāĻžāϰāĻĒāϰ āĻĒā§āϰāϤāĻŋāĻāĻž āĻŽāĻžāύāĻā§ āĻāĻĒāϰ⧠āĻāĻ āϤ⧠āĻĻāĻžāĻāĨ¤
Run in CompilerāϏāĻāϰāĻžāĻāϰ āϝ⧠āĻĒā§āϰāĻļā§āύāĻā§āϞ⧠āĻāϏā§
āĻāϏāĻžāϰ āĻā§āϰāĻŽāĻ āϝāĻāύ āĻŽāĻžāύ⧠āύāĻž, āϤāĻāύ āĻāϰ āύāĻžāĻŽ queue āĻā§āύ?
āĻŽāĻžāύāĻā§āϞ⧠āĻāϤ⧠āĻ āĻĒā§āĻā§āώāĻž āĻāϰ⧠āĻāϰ āĻāĻāĻāĻž āĻāĻāĻāĻž āĻāϰ⧠āĻŦā§āϰā§āϝāĻŧ, queue-āĻāϰ āĻŽāϤā§āĻ, āĻāĻŋāύā§āϤ⧠āĻŦā§āϰā§āϝāĻŧ priority āϧāϰā§āĨ¤ āϏāĻŽāĻžāύ priority-āϰ āĻŽāĻžāύāĻā§āϞā§āĻ āĻā§āύ⧠āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻā§āϰāĻŽā§ āĻŦā§āϰā§āĻŦā§, āĻāĻŽāύ āĻā§āύ⧠āĻāĻĨāĻž āύā§āĻ; āĻāĻā§āĻāĻžāĻŽāϤ⧠tie āĻāĻžāĻāĻžāϰ āĻāĻĒāĻžāϝāĻŧ āĻĻā§āĻāĻžāĻŦā§ lesson 02āĨ¤
āĻāĻāĻŦāĻžāϰ vector sort āĻāϰ⧠āĻļā§āώ āĻĨā§āĻā§ āĻĒāĻĄāĻŧāϞā§āĻ āϤ⧠āĻšāϝāĻŧ, āϤāĻžāĻ āύāĻž?
āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āύā§āĻāϝāĻŧāĻžāϰ āĻāĻā§āĻ āϝāĻĻāĻŋ āϏāĻŦ āĻŽāĻžāύ āĻāĻžāύāĻž āĻĨāĻžāĻā§, āϤāĻžāĻšāϞ⧠āĻāĻāĻŦāĻžāϰ sort āĻāϰāĻžāĻ āĻ āĻŋāĻ āĻāĻā§, āĻāϰ lesson 04 āϏā§āĻāĻž āĻŽā§āĻĒā§ āĻĻā§āĻāĻžāĻŦā§āĨ¤ Heap āĻā§āϤ⧠āϤāĻāύ, āϝāĻāύ āύā§āĻāϝāĻŧāĻžāϰ āĻĢāĻžāĻāĻā§ āĻĢāĻžāĻāĻā§ āĻŽāĻžāύ āĻāϏāϤā§āĻ āĻĨāĻžāĻā§, Maria-āϰ desk-āĻ āϝā§āĻŽāύāĨ¤
āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻž pop āύāĻž āĻāϰ⧠āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āĻŦāĻĄāĻŧāĻāĻž āĻāĻŋ āĻĻā§āĻāĻž āϝāĻžāϝāĻŧ?
āύāĻž, priority_queue āĻĻāĻŋāϝāĻŧā§ āϝāĻžāϝāĻŧ āύāĻž:
top()-āĻ āĻāϰ āĻāĻāĻŽāĻžāϤā§āϰ āĻĻā§āĻāĻžāϰ callāĨ¤ āĻā§āύ⧠āĻāĻžāĻā§ top-āĻāϰ āĻŦā§āĻļāĻŋ āĻāĻŋāĻā§ āϞāĻžāĻāϞ⧠āĻā§āύ container āύāĻŋāϤ⧠āĻšāĻŦā§, āϏā§āĻāĻž āĻĻā§āĻāĻžāĻŦā§ lesson 04āĨ¤
āĻŽā§āϞ āĻāĻĨāĻž
- āĻāĻāĻāĻž priority_queue āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧ āĻŽāĻžāύāĻāĻž āĻāĻā§ āĻĢā§āϰāϤ āĻĻā§āϝāĻŧ, āĻŽāĻžāύāĻā§āϞ⧠āϝ⧠āĻā§āϰāĻŽā§āĻ āĻāϏā§āĻ;
greater<int>āĻĻāĻŋāϞ⧠āĻĻā§āϝāĻŧ āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āĻāĻāĻžāĨ¤ - āĻā§āϤāϰ⧠āĻĨāĻžāĻā§ āĻāĻāĻāĻž heap: level āϧāϰ⧠āϧāϰ⧠āĻāĻāĻāĻž vector-āĻ āϰāĻžāĻāĻž āĻāĻāĻāĻž tree, āϝā§āĻāĻžāύ⧠āĻĒā§āϰāϤāĻŋāĻāĻž parent āĻāϰ child-āĻĻā§āϰ āĻā§āϝāĻŧā§ āĻā§āĻ āύāĻžāĨ¤
- āĻāĻāĻāĻž push āĻŦāĻĄāĻŧāĻā§āϰ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ log2 n level āĻāĻ ā§, āĻāĻāĻāĻž pop āϤāϤāĻāĻžāĻ āύāĻžāĻŽā§: āĻĻāĻļ āϞāĻžāĻ āĻŽāĻžāύ āϧāϰ⧠āĻŽāĻžāϤā§āϰ 20āĻāĻž level-āĻāĨ¤
pop()āĻāĻŋāĻā§āĻ āĻĢā§āϰāϤ āĻĻā§āϝāĻŧ āύāĻž, āϤāĻžāĻ āĻāĻā§top()āĻĒāĻĄāĻŧā§;int x = pq.pop();āĻĒāĻžāϝāĻŧvoid value not ignored as it ought to beāĨ¤- āĻāĻžāϞāĻŋ priority_queue-āĻ
top()āĻŦāĻžpop()undefined: āĻāĻ run crash āĻāϰā§āĻā§, āĻāϰā§āĻ run size print āĻāϰā§āĻā§ 18446744073709551615āĨ¤ āĻāĻā§empty()check āĻāϰā§āĨ¤ - āĻāϰāĻ āĻāĻā§āϰ⧠āϝā§āϤ⧠āĻāĻžāĻāϞā§: Under the Hood, vector-āĻāϰ āĻā§āϤāϰā§āϰ heap āĻāϰ sift-āĻāϰ āĻšāĻŋāϏāĻžāĻŦ (Pro)āĨ¤
āĻāϰāĻĒāϰ lesson 02 priority_queue-āĻāϰ āĻĒā§āϰāϤāĻŋāĻāĻž operation āĻāĻāĻāĻž āĻāĻāĻāĻž āĻāϰ⧠āĻĻā§āĻāĻžāĻŦā§, āĻĒā§āϰāϤāĻŋāĻāĻžāϰ āĻāϰāĻāϏāĻš, āĻāϰ āĻāϰ āĻā§āϰāĻŽ āĻŦā§āĻā§ āύā§āĻāϝāĻŧāĻžāϰ āϏāĻŦ āĻāĻĒāĻžāϝāĻŧāĨ¤
lesson ā§§ āĻļā§āώ
āĻļā§āώ āĻšāϞ⧠āĻāĻŋāĻšā§āύ āĻĻāĻŋāύ, āĻ āĻā§āϰāĻāϤāĻŋ āĻāĻĒāύāĻžāϰ āϏāĻžāĻĨā§ āĻĨāĻžāĻāĻŦā§āĨ¤
āĻĒāϰā§āϰāĻāĻž: priority_queue-āĻāϰ āĻĒā§āϰāϤāĻŋāĻāĻž operation, āĻāĻāĻāĻž āĻāĻāĻāĻž āĻāϰā§, āĻāϰāĻāϏāĻš