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

Mar*_*dik 2 c++ qt stl

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

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();
}
Run Code Online (Sandbox Code Playgroud)

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

事实上,容器:QVector<T>,QHash<Key, T>,QSet<T>,QString,并且QByteArray都提供了这种可能性,但QMap<Key, T>并QMultiMap<Key, T>没有.

为什么会这样,我怎么能预分配内存的QMap<Key, T>和QMultiMap<Key, T>?

Ker*_* SB 5

映射是基于节点的容器,因此每个元素都是单独分配的.没有"预分配"这样的东西,它没有任何优势(即花费的总时间是相同的).