C++ unordered_map桶增長規律


無序容器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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM