首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为std::map或QMap预分配内存?

如何为std::map或QMap预分配内存?
EN

Stack Overflow用户
提问于 2012-08-23 18:35:58
回答 2查看 3.2K关注 0票数 2

我正在开发一个程序,其中性能至关重要。在这里我使用了QMultiMap,这是Qt框架提供的一个类,类似于std::map

代码语言:javascript
复制
QMultiMap<int, SomeClass> heavilyUsedMap;

void prepareMap()
{
    ...
    heavilyUsedMap.reserve(nEntries); // There is no reserve.
    // fill heavilyUsedMap with a known number of entries.
}

void useMap()
{
    // computations
    heavilyUsedMap.clear();
}

我经常使用prepareMap()。当我想要优化时,将内存分配给heavilyUsedMap是有意义的。

实际上,容器:QVector<T>QHash<Key, T>QSet<T>QStringQByteArray都提供了这种可能性,但QMap<Key, T>QMultiMap<Key, T>不提供。

为什么会这样?我如何为QMap<Key, T>QMultiMap<Key, T>预分配内存

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-23 18:37:35

它最有可能是由二进制搜索树支持的,所以预分配并不常见,因为它通常是一个链接结构,每个节点都根据需要动态分配。

如果顺序并不重要,请考虑使用散列映射,您可以进行预分配,通常它的性能也会更好。所以QHashMap<int, SomeClass>

我还看到你的键类型是int,如果域足够小,你可以使用一个完美的散列,它本质上是一个数组。所以QVector<SomeClass>,它的性能甚至比散列映射更好。

票数 3
EN

Stack Overflow用户

发布于 2012-08-23 18:39:36

map是一个基于节点的容器,因此每个元素都是单独分配的。没有“预分配”这回事,它也不会有任何优势(即总花费的时间是一样的)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12089728

复制
相关文章

相似问题

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