清除unordered_map时对max_load_factor和bucket count的影响

时间:2014-10-08 18:44:53

标签: c++ unordered-map

如果我unordered_map.clear()这会更改max_load_factormax_bucket_count吗?

1 个答案:

答案 0 :(得分:1)

否 - C ++ 11标准中的表103表示clear只删除了元素,empty()为真。您可以放心地假设它没有进行其他无关的,未记录的更改。即使您已将max_load_factor从默认值1.0更改为clear(),也不会再被max_bucket_count修改。

在大多数系统上,

size_t(-1)很可能硬编码到max_bucket_count - 可变系统内存,交换/虚拟内存等,竞争它的其他进程,动态操作系统缓冲区/内存使用等等。返回有意义的值是不切实际的,因此大多数程序都不应该为此烦恼。 (它可能 - 现在或在某些乌托邦未来 - 对gew嵌入式系统或玩具C ++有一些模糊的意义 - 就像具有固定进程内存的系统,或者"微观"空间优化,如使用更小的(例如用于索引存储桶的16位类型。)无论如何,没有合理的理由认为清除容器会影响clear与{{1}}之前的值不同。