【问题标题】:Does clear() affect the bucket count of std::unordered_set?clear() 会影响 std::unordered_set 的桶数吗?
【发布时间】:2014-10-29 20:42:08
【问题描述】:

answersstd::vector 有很多,但是std::unordered_set 呢?

我真正的问题(密切相关)是这个;如果我事先保留我知道的合理大小,那么通过在每次使用之前清除它来重用相同的无序集是否有效?

【问题讨论】:

  • 我会说这将是特定于实现的。该标准仅规定clear() 擦除容器中的所有元素。
  • 我认为 same argument applies as for std::vector::reserve: bucket_count 是可观察状态的一部分;允许在插入时更改它,但不允许在 rehashreserve 上进行更改(据我所知,甚至在 erase 上)。
  • @dyp: you've lost me... "bucket_count... not explicit allowed to change on rehash or reserve" - 后者的存在是为了允许存储桶的数量(因此bucket_count())进行修改 - 前者直接接受新数量的桶(但受size() / max_load_factor() 健全性检查),后者从许多预期元素和当前max_load_factor 派生它。 “明确”与否,这就是他们所做的。
  • @TonyD 嗯,我似乎很困惑。当然,在插入时明确允许更改 rehashreserve,但不能更改 clearerase

标签: c++ c++11 unordered-set


【解决方案1】:

正式答案是:这取决于实施。

非正式的回答是:unordered_set 内部有一个(某种)桶数组,并且很可能实现与vector 一致,因此调用clear() 时不会删除该数组。所以打电话给clear() 很可能会带来一些好处。

【讨论】:

  • 谢谢,就像乔纳森波特的回答一样;很高兴知道它没有指定。无论如何,在每次使用之前使用reserve 已经是性能上的提升。
猜你喜欢
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
相关资源
最近更新 更多