c++11新特性中unordered_map與傳統map比較

unordered_map是很早就知道的概念,但卻一直沒有認真去理解,單單以爲它是Boost庫裏對map的實現,今天在做Leetcode的題目的時候,發現了使用它的優越性,索性翻開書,並查一查資料,把它大致搞個清楚,省的以後還要再查再找,浪費時間。

unordered_map是C++Boost庫中的內容,這裏的unordered翻譯成“無序”。

但它並不是完全的“無序”的概念,而是散列式的存儲方式。

unordered庫提供了兩個散列映射類,unordered_map和unordered_multimap。

它們的接口、用法與STL裏的標準關聯容器map和multimap相同,但是內部實現不同。

它們用散列表代替了二叉樹的實現,模板參數多了散列計算函數,

比較謂詞使用equal_to<>。

看到這裏,我們就應該明白,比起map/multimap,unordered_map和

unordered_mutimap在查找元素的時候,速度不是一般的快。

 

它們的查找速率是常數級的,而map/multimap是基於二叉樹實現的,
所以查找是O(logn)的複雜度。

unordered_map屬於關聯式容器,採用std::pair保存key-value形式的數據。用法與map一致。特別的是,STL中的map因爲是有序的二叉樹存儲,所以對key值需要有大小的判斷,當使用內置類型時,無需重載operator < ;但是用用戶自定義類型的話,就需要重載啦! unoredered_map全程使用不需要比較元素的key值的大小,但是,對於元素的==要有判斷,又因爲需要使用hash映射,所以,對於非內部類型,需要程序員爲其定義這二者的內容,對於內部類型,就不需要了。


unordered庫使用“桶”來存儲元素,散列值相同的被存儲在一個桶裏。當散列容器中有大量數據時,同一個桶裏的數據也會增多,造成訪問衝突,降低性能。爲了提高散列容器的性能,unordered庫會在插入元素是自動增加桶的數量,不需要用戶指定。但是,用戶也可以在構造函數或者rehash()函數中,指定最小的桶的數量。

參考:http://blog.sina.com.cn/s/blog_7e5f32ff0102wt7k.html

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