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表的思想,以空間換時間 ...