C++ clear()是否影响std::unordered_集的存储桶计数?
有大量的withC++ clear()是否影响std::unordered_集的存储桶计数?,c++,c++11,unordered-set,C++,C++11,Unordered Set,有大量的withstd::vector,但是std::unordered\u set呢 我真正的问题(密切相关)是:;如果我事先将我知道的合理大小保留下来,通过在每次使用前清除相同的无序集来重用它是否有效?正式答案是:这取决于实现 非正式的回答是:unordered\u set内部有一个bucket数组(某种类型),而且实现很可能与vector一致,因此调用clear()时不会删除此数组。因此调用clear()很可能会带来一些好处。我认为这是特定于实现的。标准只规定clear()擦除容器中的所有
std::vector
,但是std::unordered\u set
呢
我真正的问题(密切相关)是:;如果我事先将我知道的合理大小保留下来,通过在每次使用前清除相同的无序集来重用它是否有效?正式答案是:这取决于实现
非正式的回答是:
unordered\u set
内部有一个bucket数组(某种类型),而且实现很可能与vector
一致,因此调用clear()
时不会删除此数组。因此调用clear()
很可能会带来一些好处。我认为这是特定于实现的。标准只规定clear()
擦除容器中的所有元素。我认为:bucket\u count
是可观察状态的一部分;它可以在插入时更改,但在rehash
或reserve
时(甚至在erase
上,据我所知…)不允许显式更改。@dyp:你把我弄丢了。。。“bucket\u count
…不允许在rehash
或reserve
时明确更改”-后者允许修改bucket的数量(因此bucket\u count()
)-前者直接接受新的bucket数量(但需要进行size()/max\u load\u factor()
健全性检查)后者是从许多预期元素和当前的max\u load\u factor
得出的。“显式”或“不显式”是他们做的事情。@TonyD-Hmm似乎我很困惑。当然,它被明确允许在插入时进行更改,rehash
和reserve
,但不能clear
或erase
。谢谢,就像乔纳森·波特的回答一样;很高兴知道没有具体说明。在每次使用之前使用reserve
,不管怎样,性能已经有所提高。