确定一个位置在封闭散列中是否空闲

时间:2009-01-10 20:10:17

标签: c++ hash

您如何确定某个职位是否已经被占用?分配内存时,其中的所有内容都是垃圾(在C ++中,这就是我正在使用的atm)。我正在考虑使用一个辅助bool数组来知道该位置是否被占用,但这需要相当多的额外内存。

我也可以为每个位置设置一个值,但之后我将无法使用所述值。在这两种情况下,我也会失去一些初始化值的性能(例如,bools为false,其他值为0表示位置是空闲的。)

还有其他解决方案吗?

2 个答案:

答案 0 :(得分:2)

通常,您使用特殊的占位符元素来指示空值。在最简单的情况下,这可能是一个空指针,但这当然意味着你引入了一个间接;您无法直接存储您的值。在所有其他情况下,您必须考虑实际存储的类型。例如,如果存储了32位整数,则必须保留至少一个预定义值(例如0)作为sentinel元素,从而减少可能存储在哈希表中的值的范围。

带有标志的附加数组是一个很好的解决方案。考虑通过存储位标志而不是整个字节变量(甚至bool,在大多数架构上每个需要4个字节),可以将此数组减少至少8倍。

答案 1 :(得分:0)

您可以使用boost::optional代替原始值。这就是创建它的原因,即为项目添加未初始化的值。它的性能类似于首先初始化值,但每个项目只需要少量的额外内存。