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

标签 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();
}

我使用 prepareMap()很多。当我想优化时,为 heavilyUsedMap 分配内存是有意义的.

确实是容器:QVector<T> , QHash<Key, T> , QSet<T> , QString , 和 QByteArray都提供了这种可能性,但是QMap<Key, T>QMultiMap<Key, T>不要。

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

最佳答案

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

关于c++ - 如何为 std::map 或 QMap 预分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12089728/

相关文章:

c++ - 如何将 Qline 坐标发送到 QPainter Widget

c++ - 使用 STL vector 优化算术运算

c++ - 使用 STL 对两个集合的并集元素进行计数

c# - 如何为类 C 语言创建 Visual Studio 语法突出显示

c++ - 是否可以推断出 std::insert_iterator 包含的类型?

c++ - 虚拟异常类导致动态链接器错误

c++ - 为什么 string_view 构造函数不采用一对迭代器

c++ - 如何使用 QT 创建 JSON 数组

c++ - makefile 中的 qt gui 项目错误

c++ - 为什么 std::set<>::find 返回一个常量?