stl priority_queue 和堆相关的方法有什么区别?

what is the difference between stl priority_queue and heap-related method?

我用堆相关的操作维护了一个heap结构

例如:

std::vector<int> a = {1,2,56, 2};
std::make_heap(a.begin(), a.end());
// add
a.push_back(3);
std::push_heap(a.begin(), a.end());
// erase
std::pop_heap(a.begin(), a.end());
int v = a.back();
a.pop_back();

最近,我发现有一个名为priority_queue的结构似乎也实现了一个堆。

pushpop.

的功能更简单

这两个有什么区别吗? (性能、内存和其他)

你觉得哪一个更好?

我可以使用 reserve 来减少内存分配时间,因为容器是向量(用于堆操作)吗?

参见cppreference.com

Working with a priority_queue is similar to managing a heap in some random access container, with the benefit of not being able to accidentally invalidate the heap.

如果不清楚:您的代码管理随机访问容器中的堆。