当插入太多元素时,std :: map会自动调整大小吗?

时间:2014-06-13 04:19:20

标签: c++ map resize

当插入太多元素时,STL的std :: map会自动调整大小吗?如果是,那么费率是多少?

据我所知,它应该有一个,但我无法找到任何调整大小()。

如果std :: map确实调整了大小,那么如何调整调整大小?

2 个答案:

答案 0 :(得分:9)

当元素被添加时,地图一次增长一个节点...你不能像vector那样“调整”它们 - 之前抓住一块连续的内存而不是之后的许多小块 - 因为它们不会无论如何都不要使用这样的连续块。它们具有链接各个节点的指针,每个节点有一个元素。

答案 1 :(得分:1)

插入元素时,所有STL容器会自动“调整大小”。即当您使用some_container::insert功能将元素插入容器时,无论您插入多少元素,都不必执行任何其他操作(直到达到某个物理限制,例如耗尽内存或点击{{ 1}})。

你还意味着“调整调整大小率”......即使在适用这一概念的那些调查台中也无法调整“调整大小率”(如container::max_size()的情况)。 std::vector方法(即使存在)也不会调整“调整大小率”。容器的增长策略是一个实现细节,不向用户公开,也不能由用户控制。

同时,resize的典型实现将分别为每个地图元素分配存储空间。这种容器不具有也不需要任何“调整大小”。它的调整大小策略固定为“每次需要一个元素时再添加一个元素”或“每N个元素需要添加N个元素”。