unordered_map是C++標準庫中的一個關聯容器,用于存儲鍵-值對,其實現原理是基于哈希表。
哈希表是一種通過將鍵映射到數組索引來實現快速查找的數據結構。具體實現步驟如下:
- 創建一個桶數組(bucket array),每個桶中存儲一個鏈表(bucket list)。
- 當插入一個鍵-值對時,首先通過哈希函數將鍵映射到一個索引值,然后將鍵-值對插入對應桶的鏈表中。
- 在查找一個鍵的過程中,首先通過哈希函數計算鍵對應的索引值,然后在對應桶的鏈表中查找目標鍵。
- 如果發生沖突(兩個不同的鍵映射到同一個索引值),則通過鏈表解決沖突。新插入的鍵-值對會添加到鏈表的頭部,這樣可以保證在查找時,最近插入的鍵-值對先被查找到。
- 當桶數組的負載因子(load factor)超過某個閾值(比如0.75)時,會觸發擴容操作。擴容時,會創建一個更大的桶數組,并將原有的鍵-值對重新插入到新的桶數組中。
通過使用哈希表作為底層數據結構,unordered_map能夠提供快速的插入、查找和刪除操作,平均時間復雜度為O(1)。然而,由于哈希沖突的存在,最壞情況下,查找操作的時間復雜度為O(n),其中n為unordered_map中的元素個數。