假设我有一个 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/