關聯容器map和無序關聯容器unordered_map
阿新 • • 發佈:2018-11-30
兩個示例程式碼,第一個test函式是map,第二個是unorder_map
test()的結果:
unorderTest()的結果:
可以看到,關聯容器map是按字母順序輸出的,而無序關聯容器unordered_map則是不太可能按字母順序輸出的,但對於相同的輸入,其輸出還是相同的。
無序關聯容器unordered_map的基本的 插入、查詢等操作跟有序關聯容器map一樣。
- 無序容器 在儲存上組織為一組桶。使用一個雜湊函式將元素對映到桶。每個桶儲存0個或多個元素。無序容器的效能依賴於雜湊函式的質量和桶的數量和大小。
無序容器unordered_map對桶的操作:
遍歷桶
程式碼入下:
輸出如下:
觀察雜湊函式對關鍵字的對映後的值
因為元素與桶之間的對映是根據 經過雜湊函式處理過的 雜湊值來得到的,可以利用預設的雜湊函式來觀察元素關鍵字被雜湊函式對映後的值:
輸出如下:
從輸出可以看出,雖然元素很少,但第三個桶有兩個元素,這個雜湊函式並不適合這所給的這幾個元素值。
關鍵字為自定義類型別的無序容器的雜湊函式:
過載==操作符, 自定義雜湊函式
虛擬碼如下:
從下圖的宣告可知,如果第三個引數不是用自定義的雜湊函式,則會呼叫系統預設的雜湊函式,在元素值是內建的型別時就可以使用這個預設的雜湊函式。