您如何确定某个职位是否已经被占用?分配内存时,其中的所有内容都是垃圾(在C ++中,这就是我正在使用的atm)。我正在考虑使用一个辅助bool数组来知道该位置是否被占用,但这需要相当多的额外内存。
我也可以为每个位置设置一个值,但之后我将无法使用所述值。在这两种情况下,我也会失去一些初始化值的性能(例如,bools为false,其他值为0表示位置是空闲的。)
还有其他解决方案吗?
答案 0 :(得分:2)
通常,您使用特殊的占位符元素来指示空值。在最简单的情况下,这可能是一个空指针,但这当然意味着你引入了一个间接;您无法直接存储您的值。在所有其他情况下,您必须考虑实际存储的类型。例如,如果存储了32位整数,则必须保留至少一个预定义值(例如0)作为sentinel元素,从而减少可能存储在哈希表中的值的范围。
带有标志的附加数组是一个很好的解决方案。考虑通过存储位标志而不是整个字节变量(甚至bool,在大多数架构上每个需要4个字节),可以将此数组减少至少8倍。
答案 1 :(得分:0)
您可以使用boost::optional
代替原始值。这就是创建它的原因,即为项目添加未初始化的值。它的性能类似于首先初始化值,但每个项目只需要少量的额外内存。