最小堆与最大堆
priority_queue的底层是vector
queue的底层是deque
堆是完全二叉树。
最小堆就是父节点小于子节点。
插入时每次加到最后,再从底向上更新一次。
删除时删除根,并将最后一个元素取代掉根,从底向上更新一次。
更新时是对于每一个节点所对应的堆进行更新。
插入就是加到最后,向上更新
删除就是交换根和最后一个元素,然后删掉“根”,向下更新
priority_queue传入的比较函数实际上是一个类型,是一个仿函数。
当一次性通过n个元素建堆时应该从下往上down(),这样的复杂度可以降到O(n)。