priority_queue 优先级队列,归根结底还是 queue,还是队列,只允许在尾部进入,并从头部取出元素,除此之外别无其他存取元素的途径。
缺省情况下,priority_queue 利用一个 max_heap 完成,max_heap 是一个以 vector 实现的 complete binary tree。max_heap 可以满足 priority_queue 所需要的“依权值高低自动递减排序”的特性。
既然是队列(queue),push() 从尾部插入元素,top()/pop() 则会访问/移除下一个(头部)元素。然而这里的“下一个元素“并非第一个放入的元素,而是优先级最高的元素。换句话说,priority_queue 内的元素已经根据其值进行了排序。