2014-09-04 51 views
6

有很多answersstd::vector,但std::unordered_set呢?clear()是否會影響std :: unordered_set的桶數?

我真正的問題(密切相關)是這樣的;如果我事先保留我所知道的合理大小,在每次使用前清除它,重用相同的無序集合是否有效?

+1

我想說這將是具體實現。該標準僅指定'clear()'擦除容器中的所有元素。 – 2014-09-04 23:59:19

+1

我認爲[相同的參數適用於'std :: vector :: reserve'](http://stackoverflow.com/a/18467916):'bucket_count'是可觀察狀態的一部分;它可以在插入時被改變,但是它沒有明確允許在'rehash'或'reserve'上(或者甚至在'erase'上我可以看到..)。 – dyp 2014-09-05 00:06:48

+0

@dyp:你已經失去了我......「'bucket_count' ......在'rehash'或'reserve'上沒有明確允許改變' - 後者允許存儲桶的數量(因此'bucket_count()' )被修改 - 前者直接接受新數量的桶(但受到size()/ max_load_factor()健康檢查)的影響,而後者從許多預期的元素和當前的'max_load_factor'派生。 「明確」或不是他們所做的。 – 2014-09-05 02:45:33

回答

6

正式答案是:它取決於實施。

非正式的回答是:unordered_set裏面有水桶的(某種)的陣列,並且最有可能實現與vector一致,所以當clear()稱爲該數組不會被刪除。所以打電話clear()最有可能會帶來一些好處。

+0

感謝Jonathan Potter的回答,很高興知道它沒有被指定。無論如何,在每次使用前使用'reserve'已經是性能上的一個提升。 – Sheljohn 2014-09-05 00:08:57