首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++ priority_queue基础矢量容器容量调整

C++ priority_queue基础矢量容器容量调整
EN

Stack Overflow用户
提问于 2010-09-08 17:40:43
回答 5查看 9.4K关注 0票数 16

我使用带有向量的priority_queue作为底层容器。但是,我预计堆的大小会非常大。我知道动态矢量容量调整的问题。因此,我正在寻找一种方法来为我的priority_queue中的底层向量分配足够的空间。有什么建议可以实现这一点吗?

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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的所有方法。

票数 26
EN

Stack Overflow用户

发布于 2010-09-08 18:58:45

您不能直接访问底层容器修改容量。但是,您可以将内部使用的容器更改为std::dequestd::deque容器可能比向量稍慢(不是大O表示法),但增长要快得多,因为它不需要重新定位所有现有元素。

票数 3
EN

Stack Overflow用户

发布于 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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3666387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档