【发布时间】:2020-06-10 07:10:47
【问题描述】:
std::unordered_map 和std::vector 都具有reserve 方法,这增加了集合的容量,因此可以在不扩大内部缓冲区的情况下向集合中添加多个元素。但是,std::vector 也有一个方法 capacity(),它返回集合的当前容量。 std::unordered_map 没有这样的方法。有没有办法使用类已经提供的任何东西来获得std::unordered_map 的容量?
【问题讨论】:
-
请注意,任何给定的答案都不能保证内部缓冲区不会改变大小。
-
请注意,
reserve(n)onunordered_map不会为 n 个元素保留空间,而是为在给定最大负载因子的情况下存储 n 个元素所需的桶数。capacity在vector意义上并不真正适用于unordered_map,因为每当您添加元素时,存储桶都可以扩展。 -
@Koosha 桶的集合不会扩大,但插入元素的桶会扩大。 (没有“the”内部缓冲区。)
-
@Koosha 为什么他们会扔东西?
unordered_map就像没有订单的map。 -
@Koosha 每个插入无序映射确实分配。即使桶的数组没有被重新分配,也需要为插入的元素分配一个节点。如果您想避免这种分配,您可以提供自己的分配器,例如一些基于预分配缓冲区的内存池。请注意,在此分配器中,您需要区分数组和节点分配。
标签: c++ vector unordered-map