1. 程式人生 > >關聯容器map和無序關聯容器unordered_map

關聯容器map和無序關聯容器unordered_map

兩個示例程式碼,第一個test函式是map,第二個是unorder_map

test()的結果:

unorderTest()的結果:

可以看到,關聯容器map是按字母順序輸出的,而無序關聯容器unordered_map則是不太可能按字母順序輸出的,但對於相同的輸入,其輸出還是相同的。

 

無序關聯容器unordered_map的基本的 插入、查詢等操作跟有序關聯容器map一樣。

  •   無序容器 在儲存上組織為一組桶。使用一個雜湊函式將元素對映到桶。每個桶儲存0個或多個元素。無序容器的效能依賴於雜湊函式的質量和桶的數量和大小。

無序容器unordered_map對桶的操作:

 

遍歷桶

程式碼入下:

      

輸出如下:

     

觀察雜湊函式對關鍵字的對映後的值

因為元素與桶之間的對映是根據 經過雜湊函式處理過的 雜湊值來得到的,可以利用預設的雜湊函式來觀察元素關鍵字被雜湊函式對映後的值:

 

輸出如下:

從輸出可以看出,雖然元素很少,但第三個桶有兩個元素,這個雜湊函式並不適合這所給的這幾個元素值。

關鍵字為自定義類型別的無序容器的雜湊函式:

過載==操作符, 自定義雜湊函式

  

 

虛擬碼如下:

 

   

  

從下圖的宣告可知,如果第三個引數不是用自定義的雜湊函式,則會呼叫系統預設的雜湊函式,在元素值是內建的型別時就可以使用這個預設的雜湊函式。