gpt4 book ai didi

c++ - 清空后减少 std::unordered_map 内存占用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:51 34 4
gpt4 key购买 nike

假设我有一个 std::unordered_map 对象,我向其中添加了一些元素,然后删除了它们。除了构造一个新对象来替换旧对象之外,是否有一种方法可以强制减少 map 对象的内存占用,类似于 std::vector::shrink_to_fit()

最佳答案

由于节点是根据需要分配和删除的,因此唯一可以减少的内存是桶列表使用的内存。这可以通过在 unordered_map 上调用 rehash(0) 来完成(参数是要使用的桶的最小数量;实际数量可以根据存储在 map 中的东西和 map 的 max_load_factor())。这可能是一项耗时的操作,具体取决于有多少节点最终进入同一个存储桶。

创建新 map 的替代方案会更慢,因为存储在新 map 中的东西需要为它们分配存储空间,在所有插入过程中可能会发生几次重新散列(取决于 map 的大小),以及使用的节点通过旧 map 将需要被释放。可以通过调用 extract 从旧映射中删除节点,调用 insert 将它们添加到新映射来重用节点,但在新映射中仍然可能发生重新散列。

关于c++ - 清空后减少 std::unordered_map 内存占用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46257326/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com