2
假设我有一个std::unordered_map
对象,我添加了一些元素然后删除它们。除了构建一个替换旧对象的新对象之外,是否有办法强制减少映射对象的内存占用,类似于std::vector::shrink_to_fit()
?清空后减少std :: unordered_map内存占用空间
假设我有一个std::unordered_map
对象,我添加了一些元素然后删除它们。除了构建一个替换旧对象的新对象之外,是否有办法强制减少映射对象的内存占用,类似于std::vector::shrink_to_fit()
?清空后减少std :: unordered_map内存占用空间
由于根据需要分配和删除节点,所以可以减少的唯一内存是存储区列表所使用的内容。这可以通过unordered_map
上的resize(0)
来完成(该参数是要使用的桶的最小数量;实际数量可以基于存储在地图中的东西的数量和地图的max_load_factor()
更大)。这可能是一个耗时的操作,具体取决于同一个存储桶中有多少个节点。
创建新地图的替代方法将会变慢,因为存储在新地图中的东西将需要为它们分配存储空间,在所有插入过程中都可能发生几次重新刷新(取决于地图的大小),以及节点旧地图使用将需要被释放。通过调用extract
从旧地图中删除节点,然后将insert
添加到新地图中,节点可以重复使用,但仍可能在新地图中重新哈希。
我不知道是否为此编写分配器是否过分。 – Rakete1111
缩小哈希映射涉及重新哈希,因此构建新的哈希映射可能同样快。 – rustyx