默认重新哈希后的std :: unordered_map <> bucket_count()

时间:2020-03-03 08:43:11

标签: c++ std unordered-map

如果我一直在向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之类的标准参考书中找不到关于它的任何内容。

1 个答案:

答案 0 :(得分:1)

重新散列后的桶大小将取决于编译器。您看到的具体数字可以通过获取当前存储桶大小,乘以 2,然后从此处的 __prime_list 数组中获取大于该值的最近素数来找到:https://github.com/gcc-mirror/gcc/blob/5bea0e90e58d971cf3e67f784a116d81a20b927a/libstdc%2B%2B-v3/src/shared/hashtable-aux.cc