無序容器unordered_map存儲為一組桶,各元素通過hash函數映射到各個桶中。心血來潮,來看一下桶的增長規律。
測試環境:Windows vscode 編譯器 GCC,不同的平台和編譯器結果應該會有不同!
1 #include <iostream> 2 #include <string> 3 #include <unordered_map> 4 using namespace std; 5 6 int main() 7 { 8 unordered_map<int , string> ump; 9 for(int i=0; i<190; i++) 10 { 11 ump.insert(pair<int, string>(i, "amy")); 12 cout << "插入 " << i << " - "; 13 cout << "桶數量" << ump.bucket_count() << " - "; 14 cout << "最大桶數量" << ump.bucket_count() << endl; 15 } 16 return 0; 17 }
我們從上面部分結果來看,每當桶不夠用時,桶數會以大致 bucket[n] = 2*bucket[n-1] + 奇數 (1, 3, 5, 9 ...)來增長。與vector 成倍增長倒是不同。
3 = 2 * 0 + 3
7 = 2 * 3 + 1
17 = 2 * 7 + 3
37 = 2 * 17 + 3
79 = 2 * 37 + 5
167 = 2 * 79 + 9
337 = 2 * 167 + 5