unorder_map和unorder_set的提出是因為紅黑樹作為關聯式容器的底層結構時,查詢資料的時間複雜度為logn,對資料的查詢並不方便。所以unorder_map和unorder_set的底層實現採用雜湊。
unorder_map儲存的是的鍵值對。
unorder_set儲存的是的鍵值
unorder_map :
kkey
vpair
keyofvalue(仿函式)
pair.first
unorder_set:
kkey
vkey
keyofvalue(仿函式)
key雜湊結構:
雜湊的目的是能夠通過位置與鍵值的對應關係很快找到該元素,從而降低時間複雜度為o(1)。
它的構建方式是將鍵值對中的key值與開闢的vector總容量進行%取餘的運算,從而得到在vector中的位置進行儲存。——雜湊(雜湊)方法,構造出的這種結構叫雜湊表(雜湊表)
上面所述的取餘操作有什麼問題呢?比如空間大小為10,對於key為1和11的鍵值對來說,1%10=1;11%10=1;計算出來的位置都是1的位置,那麼到底應該存1還是11的鍵值對?這個問題就叫雜湊衝突。
對於這個問題
閉雜湊當發生雜湊衝突時,如果雜湊表的位置沒有滿,就利用線性探測來尋找下乙個合適的位置插入鍵值對。線性探測:從發生衝突的位置依次向後找為空的位置。閉雜湊刪除元素不是真正的物理刪除,只是將該位置的狀態標記為delete,以不妨礙其他元素的查詢。
下面程式測試過啦,自己實現了部分雜湊的介面
#include #include using namespace std;
//閉雜湊
enum state
;template struct hashnode
;template class hashtable
bool insert(const pair& data)
_ht[index]._data = data;
_ht[index]._state = exist;
++_size;
return true;
} void checkcapacity()
//舊表新錶交換
swap(_ht, newht._ht);
} }node* find(const k& key)
++index;
if (index == _ht.size())
index = 0;
} return nullptr;
} bool erase(const k& key)
return false;
}private:
vector_ht;
size_t _size;
};void testhash2()
int main()
雜湊閉雜湊實現
一 實現靜態的雜湊表 下面,將給出靜態實現 靜態 define max size 10 typedef enum state templatestruct elem templatebool isline true class hashtable size 0 插入元素 bool insert co...
雜湊表 閉雜湊
閉雜湊主要就是需要注意一下 墓碑 的操作,其他的其實都簡單。asl的計算忘了,找了兩道題都沒算對,這才是我不寫的真正原因 裡是裝13用的 include using namespace std 雜湊表 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料...
雜湊之開雜湊,閉雜湊
有沒有一種方法時間複雜度,僅僅o 1 尼,那麼我們就要構造一種儲存結構,通過某種函式是之元素與它對應的關鍵碼之間能建立一一對映的關係,那麼自然通過之中一一對映的關係,我們就可以很快的找到我們需要的元素。所以進入雜湊這個這題首先我們需要乙個我們下標,這個下表在雜湊當中 我們就稱之為雜湊位址。而這個位址...