unordered map,雜湊結構

2021-09-26 10:38:08 字數 2104 閱讀 3856

c++11中新增4個unordered系列關聯式容器

unordered_map說明

unordered_map的容量

函式宣告

功能介紹

bool empty() const

檢測unordered_map是否為空

size_t size()

獲取unordered_map的有效元素個數

unordered_map的迭代器

函式宣告

功能begin

返回unordered_map第乙個元素的迭代器

end返回unordered_map最後乙個元素下乙個位置的迭代器

cbegin

返回unordered_map第乙個元素的const迭代器

cend

返回unordered_map最後乙個元素下乙個位置的const迭代器

unordered_map的元素訪問

函式宣告

功能operatot

返回與key對應的value,沒有乙個預設值

unordered_map的查詢

函式宣告

功能介紹

iterator find(const k& key)

返回key在雜湊桶中的位置

size_t count(const k& key)

返回雜湊桶中關鍵碼為key的鍵值對的個數

unordered_map的修改操作

函式宣告

介紹insert

向容器中插入鍵值對

erase

刪除容器中的鍵值對

void clear()

清空容器中有效元素個數

void swap(unordered_map&)

交換兩個容器中的元素

size_t bucket(const k& key)

返回元素key所在的桶號

底層結構

unordered_map系列的關聯式容器之所以效率比較高,在於底層實現了雜湊結構

雜湊結構

定義hashfunc使元素的儲存位置與它的關鍵碼之間建立一對一對映的關係

插入元素時,根據待插入元素的關鍵碼,以hashfunc計算出該元素的儲存位置,在結構中按此位置進行存放

搜尋元素時,對關鍵碼進行同樣的計算,把求得的函式值當做元素的儲存位置,在結構中按此位置去元素比較,若關鍵碼相等,則搜尋成功

hash(key) = key % capacity

雜湊衝突

不同關鍵字通過雜湊函式計算出相同的雜湊位址,此時稱為雜湊衝突,這兩關鍵字稱為同義字

雜湊函式

hashfunc設計原則

// 雜湊表每個空間給個標記

// empty此位置空, exist此位置已經有元素, delete元素已經刪除

enum state

;

線性探測優點 : 實現簡單

線性探測缺點 : 一旦發生雜湊衝突 , 所有的衝突連線在一起,容易產生資料"堆積", 即: 不同關鍵佔據了可利用空間,是尋找某關鍵碼的位置需要多次比較,導致速率降低,因而進行二次探測

開雜湊

開雜湊法又叫鏈位址法(開鏈法),首先對關鍵碼集合用雜湊函式計算雜湊位址,具有相同位址的關鍵碼歸於同一子集合,每乙個子集合稱為乙個桶,各個桶中的元素通過乙個單鏈表鏈結起來,各鍊錶的頭結點儲存在雜湊表中。

開單列增容

桶的個數是一定的,隨著元素的不斷插入,每個桶中元素的個數不斷增多,極端情況下,可能會導致乙個桶中煉表節點非常多,會影響的雜湊表的效能開雜湊最好的情況是:每個雜湊桶中剛好掛乙個節點,再繼續插入元素時,每一次都會發

生雜湊衝突,因此,在元素個數剛好等於桶的個數時,可以給雜湊表增.

unordered map 碰撞處理 重雜湊

這篇也講的很好 關於負載因子的解釋 c 的hash表中有乙個負載因子loadfactor,當loadfactor 1時,hash表查詢的期望複雜度為o 1 因此,每次往hash表中新增元素時,我們必須保證是在loadfactor 1的情況下,才能夠新增 因此,當hash表中loadfactor超過了...

C 雜湊表與unordered map

這篇博文只是將我最近學習的一些知識點串聯起來的簡單記錄,旨在記錄大體的方向,並不是詳細的筆記。雜湊表是什麼 雜湊表是根據關鍵碼的值而直接進行訪問的資料結構。雜湊表用來解決什麼問題 一般雜湊表都是用來快速判斷乙個元素是否出現集合裡。leetcode的242題 有效的字母異位詞 題目描述 給定兩個字串 ...

關聯容器(五) unordered map

介紹 雜湊map是一種關聯容器,通過鍵值和對映值儲存元素。允許根據鍵值快速檢索各個元素。在內部unordered map的元素不以鍵值或對映的元素作任何特定的順序排序,其儲存位置取決於雜湊值,unordered map容器比map容器更快地通過鍵值訪問他們的單個元素 hash表的思想,以空間換時間 ...