如果我一直在向unordered_map添加值,则每次元素数量超过bucket_count()(假设max_load_factor = 1)都会进行重新哈希处理。
我很困惑的是重新哈希后的存储桶大小。
import pandas as pd
import numpy as np
import collections
l=[[u'job1', u'01', 1306], [u'job1', u'01', 1306], [u'job2', u'01', 3239], [u'job3', u'01', 151]]
print(l)
d=collections.defaultdict(list)
for i in l:
li=i
idx=li[0]+":"+li[1]
row=li[2]
d[idx].append(row)
print(d)
这将输出3 7 17 37 79 167 337 709 1493
我已经注意到,存储桶大小是素数,大约是原来的两倍。但是,它也不是下一个2的幂的最接近素数。
增加存储桶大小的背后的方法是什么? 我感到惊讶或愚蠢,以至于在诸如cplusplus.com之类的标准参考书中找不到关于它的任何内容。
答案 0 :(得分:1)
重新散列后的桶大小将取决于编译器。您看到的具体数字可以通过获取当前存储桶大小,乘以 2,然后从此处的 __prime_list 数组中获取大于该值的最近素数来找到:https://github.com/gcc-mirror/gcc/blob/5bea0e90e58d971cf3e67f784a116d81a20b927a/libstdc%2B%2B-v3/src/shared/hashtable-aux.cc