Dan*_*nra 5 c++ memory-management unordered-map
假设我有一个std::unordered_map对象,我添加了一些元素,然后删除它们.除了构造一个新对象来替换旧对象之外,有没有办法强制减少地图对象的内存占用,类似于std::vector::shrink_to_fit()?
由于节点是根据需要分配和删除的,因此唯一可以减少的内存是存储桶列表使用的内存。rehash(0)这可以通过调用来完成unordered_map(参数是要使用的最小桶数;实际数量可以更大,具体取决于地图中存储的事物数量和max_load_factor()地图的数量)。这可能是一项耗时的操作,具体取决于同一个存储桶中最终有多少节点。
创建新映射的替代方案会更慢,因为存储在新映射中的内容需要为其分配存储空间,在所有插入过程中可能会发生多次重新哈希(取决于映射的大小),并且旧映射使用的节点地图将需要被释放。可以通过调用extract从旧映射中删除节点并将insert它们添加到新映射中来重用节点,但新映射中仍可能发生重新散列。