如何在c ++

时间:2019-05-27 15:59:22

标签: c++ stl unordered-set

我当时在研究C ++中的STL,遇到了使用哈希实现的unordered_set,但是有一个带有哈希的存储桶概念,并且不同存储桶的大小也在不断变化。有人可以解释这是怎么做到的吗?

1 个答案:

答案 0 :(得分:0)

散列是将大量数据转换成较小数据的过程。因此,当您将新元素添加到std:: unordered_set时,新元素的值正在经过hash计算,而得到的哈希实际上是key,根据该哈希值将元素存储在std::unordered_set及其访问方式。

散列技术的缺陷在于,不同的值可能会导致相同的散列值(key)。在key发生冲突的情况下,该值将存储在buckets中-因此,bucket是一种存储其keys发生冲突的不同值的方法(即相同的键)。

虽然计算hash函数需要“固定”的时间,但是在同一bucket中所需元素值的分辨率是线性过程(逐个值比较),与桶。

随着您的std::unordered_set不断增长,为了确保存储桶不会变得太大(导致元素访问速度过快/相对较慢),会触发重新存储桶,该事件由{{ 1}},以便容器大小和存储桶大小保持平衡