move() && less<>()
priority_queue<int> pq(less<int>(), move(nums));
对比与优势
- 时间复杂度 O(N):优先队列接收到底层数组后,内部直接调用类似
std::make_heap的算法进行一次性原地建堆,远快于一个个 push 的 O(N log N)。 - 空间开销 O(1)(零拷贝):
std::move让优先队列直接“夺取”了nums原本的内存指针。没有申请新内存,也没有发生任何元素的复制。
priority_queue<int> pq(less<int>(), move(nums));
std::make_heap 的算法进行一次性原地建堆,远快于一个个 push 的 O(N log N)。std::move 让优先队列直接“夺取”了 nums 原本的内存指针。没有申请新内存,也没有发生任何元素的复制。