hash_map 最大可以插入多少个
1个回答
展开全部
如果指的是STL的 hash_map,可能要注意,在C++11里,hash_map 现在已经建议用 unordered_map 替代了。
其实,不光是STL,只要是Hash原理的Map可插入的容量一般都与以下几个要素相关(借助磁盘永久化的哈希除外,它们基本没有限制)。
1、载荷的内存消耗。每一条记录的Key 均对应了一个节点,存储Key,Value两个值
2、哈希表的索引消耗。包含桶地址表(往往有一定的冗余)、每个桶的链表。
3、其他少量中间变量和维护内存。
因此,假设Key,value 体积的数学期望(均值)为M字节,哈希表中,桶地址的冗余率期望为k(k>1),一个桶地址字节长度为B字节,桶链表一个节点为L字节,维护内存D字节,则,对已知内存容量C,存储的个数N的方程为
N*M + (B * k ) * N + L * N + D= C
=>
N = (C - D) /(M + kB + L)
其实,不光是STL,只要是Hash原理的Map可插入的容量一般都与以下几个要素相关(借助磁盘永久化的哈希除外,它们基本没有限制)。
1、载荷的内存消耗。每一条记录的Key 均对应了一个节点,存储Key,Value两个值
2、哈希表的索引消耗。包含桶地址表(往往有一定的冗余)、每个桶的链表。
3、其他少量中间变量和维护内存。
因此,假设Key,value 体积的数学期望(均值)为M字节,哈希表中,桶地址的冗余率期望为k(k>1),一个桶地址字节长度为B字节,桶链表一个节点为L字节,维护内存D字节,则,对已知内存容量C,存储的个数N的方程为
N*M + (B * k ) * N + L * N + D= C
=>
N = (C - D) /(M + kB + L)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询