有很多answers與std::vector
,但std::unordered_set
呢?clear()是否會影響std :: unordered_set的桶數?
我真正的問題(密切相關)是這樣的;如果我事先保留我所知道的合理大小,在每次使用前清除它,重用相同的無序集合是否有效?
有很多answers與std::vector
,但std::unordered_set
呢?clear()是否會影響std :: unordered_set的桶數?
我真正的問題(密切相關)是這樣的;如果我事先保留我所知道的合理大小,在每次使用前清除它,重用相同的無序集合是否有效?
正式答案是:它取決於實施。
非正式的回答是:unordered_set
裏面有水桶的(某種)的陣列,並且最有可能實現與vector
一致,所以當clear()
稱爲該數組不會被刪除。所以打電話clear()
最有可能會帶來一些好處。
感謝Jonathan Potter的回答,很高興知道它沒有被指定。無論如何,在每次使用前使用'reserve'已經是性能上的一個提升。 – Sheljohn 2014-09-05 00:08:57
我想說這將是具體實現。該標準僅指定'clear()'擦除容器中的所有元素。 – 2014-09-04 23:59:19
我認爲[相同的參數適用於'std :: vector :: reserve'](http://stackoverflow.com/a/18467916):'bucket_count'是可觀察狀態的一部分;它可以在插入時被改變,但是它沒有明確允許在'rehash'或'reserve'上(或者甚至在'erase'上我可以看到..)。 – dyp 2014-09-05 00:06:48
@dyp:你已經失去了我......「'bucket_count' ......在'rehash'或'reserve'上沒有明確允許改變' - 後者允許存儲桶的數量(因此'bucket_count()' )被修改 - 前者直接接受新數量的桶(但受到size()/ max_load_factor()健康檢查)的影響,而後者從許多預期的元素和當前的'max_load_factor'派生。 「明確」或不是他們所做的。 – 2014-09-05 02:45:33