STL:unordered_set 與set的區別

c++ std中set與unordered_set區別和map與unordered_map區別類似:

1.頭文件<unordered_set> <set>

2.. set基於紅黑樹實現,紅黑樹具有自動排序的功能,因此map內部所有的數據,在任何時候,都是有序的。
3. unordered_set基於哈希表,數據插入和查找的時間複雜度很低,幾乎是常數時間,而代價是消耗比較多的內存,無自動排序功能。底層實現上,使用一個下標範圍比較大的數組來存儲元素,形成很多的桶,利用hash函數對key進行映射到不同區域進行保存。
什麼情況下使用set:

1. 當需要有序數據(不同的元素)。
2. 訪問數據(按排序順序)。
3. 需要元素的前身/後繼者。


什麼情況下使用unordered_set:

1. 需要保留一組不同的元素,不需要排序。
2. 需要單個元素訪問,即沒有遍歷。


例子:

set:

輸入:1,8,2,5,3,9

輸出:1,2,3,5,8,9

Unordered_set:

輸入:1,8,2,5,3,9

輸出:9 3 1 8 2 5(也許這個順序,受哈希函數的影響)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章