hashtable的設計是一個vector數組,每一個數組內爲一個鏈表,鏈表鏈着hash到同位置的節點,但鏈表的實現不是list或slist數組
hashtable的節點設計:設計
1.存儲元素值的變量val指針
2.一個指向下一個節點(同一個bucket內的)的指針nextelement
hashtable的迭代器:hash
1.內部維護兩個成員:it
指向當前節點的curtable
指向所屬bucket的指針基礎
2.迭代器屬於forward_iterator,只能++與讀寫,這是由鏈表的特性決定的。變量
hashtable的結構:map
1.一個vector數組buckets,用於存放節點
2.num_elements用於統計全部節點的個數(不是指vector的大小)
插入與表格重整:
插入:
當插入時,首先經過一個resize(num_elements)用於判斷是否須要重建表格,若是須要就擴充。而後進行插入
表格重整:
判斷表格是否須要重整是經過判斷num_elements是否大於buckets.size()
也就是說若是節點個數大於vector的size,則重整表格。
重整的表格大小爲大於當前表格大小的一個質數,關係上來看接近於兩倍。
表格大小調整完後,對原buckets裏的每一個節點進行重哈希(由於表格大小變了),從新構造。
底層以hashtable爲基礎,插入使用insert_unique
底層以hashtable爲基礎,插入使用insert_unique
底層以hashtable爲基礎,插入使用insert_equal
底層以hashtable爲基礎,插入使用insert_equal