【问题标题】:behaviour of unordered_map reserveunordered_map 保留的行为
【发布时间】:2014-02-14 07:03:51
【问题描述】:

我的集合(unordered_map)的最大大小是事先知道的,所以我想在启动时保留内存以进行优化。成员函数reserve() 是否达到了这个目的?文档说它将保留正确数量的存储桶以包含 N 个元素。这是否意味着只要我在地图中没有超过 N 个元素,它就会为 N 个元素保留空间并重用它们?目的是用于 LRU 缓存,因此在添加新元素之前必须逐出元素。我只是想确保在erase_element() 后跟insert_newelement() 时重用内存。

【问题讨论】:

    标签: c++ dictionary vector unordered-map lru


    【解决方案1】:

    是的。 std:unordered_map 具有成员函数 reserve() 正是为此目的。

    【讨论】:

    • 好的,很高兴知道。我只是不确定它是否会为值保留内存。我读到标准 map 容器只为键保留内存,并为元素使用动态新/删除。谢谢
    • 据我所知,std::map 没有reserve
    • 似乎 GCC 的 unordered_map 也没有 reserve() 所以我不知道该怎么做。对于地图,我正在考虑我读到的关于用于获取固定大小地图的内存池的案例,但由于底层二叉树,它仍然使用 new/delete。
    • 我使用的 GCC 版本,4.8.2,does have std::unordered_map::reserve。您使用的是哪个版本的 GCC?就std::map 而言,您可以使用一个特殊的分配器来管理内存池。
    猜你喜欢
    • 2017-07-11
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    相关资源
    最近更新 更多