C++ priority_queue底层向量容器容量调整大小

cag*_*bal 16 c++ priority-queue

我正在使用priority_queue将vector作为底层容器.但是我希望堆的大小非常大.我知道动态矢量容量调整大小的问题.所以我正在寻找最初为priority_queue中的底层向量分配足够空间的方法.有什么建议可以实现这个目标吗?

谢谢

vis*_*tor 24

stdlib容器适配器提供了一个"后门"来访问底层容器:容器是一个受保护的成员c.

因此,您可以从适配器继承以获取对容器的访问权限:

#include <queue>
#include <iostream>

template <class T>
class reservable_priority_queue: public std::priority_queue<T>
{
public:
    typedef typename std::priority_queue<T>::size_type size_type;
    reservable_priority_queue(size_type capacity = 0) { reserve(capacity); };
    void reserve(size_type capacity) { this->c.reserve(capacity); } 
    size_type capacity() const { return this->c.capacity(); } 
};

int main()
{
    reservable_priority_queue<int> q;
    q.reserve(10000);
    std::cout << q.capacity() << '\n';
}
Run Code Online (Sandbox Code Playgroud)

如果您对从stdlib类继承感到不满,请使用私有继承并priority_queue使用using声明来使所有可访问的方法.

  • +1我理所当然地反对继承标准容器,但在这种情况下,我的工程设计告诉我这可能是最好的解决方案. (2认同)
  • @Matthiew M.后门是标准的,所以它在技术上是正确的.我同意继承容器并不是最好的建议...... (2认同)