c++ map和unordered_map比較

Britjeans發表於2018-06-03

http://thispointer.com/map-vs-unordered_map-when-to-choose-one-over-another/

在這篇文章中我們將對std::map與std::unordered_map進行比較,並解釋什麼時候該選用哪一種。

兩種結構都以鍵值對的形式儲存元素,並且提供成員函式來協助高效地插入,查詢和刪除鍵值對。

但是他們在以下的幾個方面有區別:

  • 內部實現

  • 記憶體使用

  • 時間複雜度

內部實現

std::map將元素儲存在一個平衡二叉樹中,所以元素是有序儲存的。

std::unordered_map使用雜湊表來儲存元素,元素並不是有序儲存。

記憶體使用

unordered_map比ordered_map更佔用記憶體,因為需要額外的記憶體來儲存雜湊表。

查詢時間複雜度

std::map的查詢時間複雜度是O(log n)。

std::unordered_map最佳的查詢時間複雜度是O(1),如果雜湊函式不是很好的話,最糟糕的複雜度會是O(n)。

什麼時候選擇map:

  1. 當你需要低記憶體佔用率

  2. 當你希望序列是有序的

  3. 當你需要穩定的表現

什麼時候選擇unordered_map

當你有一個很好的雜湊函式和對記憶體佔用率沒有限制時

相關文章