我使用带有向量的priority_queue作为底层容器。但是,我预计堆的大小会非常大。我知道动态矢量容量调整的问题。因此,我正在寻找一种方法来为我的priority_queue中的底层向量分配足够的空间。有什么建议可以实现这一点吗?
谢谢
发布于 2010-09-08 18:53:39
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';
}
如果你不喜欢继承一个stdlib类,可以使用私有继承,并使用using
声明来访问priority_queue
的所有方法。
发布于 2010-09-08 18:58:45
您不能直接访问底层容器修改容量。但是,您可以将内部使用的容器更改为std::deque
。std::deque
容器可能比向量稍慢(不是大O表示法),但增长要快得多,因为它不需要重新定位所有现有元素。
发布于 2010-09-08 17:46:19
使用reserve
函数:
std::vector<Type>::reserve(size_t size)
示例:
std::vector<int> vec;
vec.reserve(10000);
std::priority_queue<int> q (std::less<int>(), vec);
https://stackoverflow.com/questions/3666387
复制相似问题