如何检查类数组的元素是否为空? [C ++]

时间:2014-11-17 01:25:57

标签: c++ arrays class hashmap hashtable

对于我的最新作业,我需要创建一个包含股票的哈希表,这些股票封装在一个类中。为避免碰撞,我需要使用线性探测。然而,我遇到的问题;是我无法测试数组的元素(哈希表)是否为空。

以下是从多个文件聚合的一些代码,但这只是为了让您了解正在发生的事情。

class Stock{

friend class HashMap

}

class HashMap{

bool get() //this function is used for putting new stocks into the table
private:
  struct Slot {
    Stock  slotStock;
  }
Slot *slots;
}

在get()函数中

while(slots[index] != NULL)

这给出了一个错误:没有运算符“!=”匹配这些操作数HashMap :: Slot!= int

我可以用另一种方法检查一个插槽是否为空?

数组是动态分配的。

编辑:当我初始化数组时,是否使用默认构造函数为数组的每个元素创建一个对象,还是将元素留空?

2 个答案:

答案 0 :(得分:2)

如果您有X类型的对象数组,则没有任何插槽为“空”。它们都包含X类型的对象。要表示空对象,它需要是存储在数组中的类型的可能状态。例如,您可以boost::optional<Slot>std::unique_ptr<Slot>。否则,您可以将状态直接编码到Slot类中(例如,使用bool成员)。

答案 1 :(得分:0)

您要做的是存储一组 Stock 指针,而您当前正在存储 Slot 对象的数组。为了使自己更容易,你可以使用向量来存储指针。

您的支持数据结构如下所示:

std::vector< Stock* > vecStocks;

向量中的每个项目都是&#34;插槽&#34;,除非您打算存储有关该股票的一些元数据,否则您不需要您的Slot类。

要检查向量的任何插槽中是否有库存,请将向量项目与NULL进行比较,如下所示:

if (vecStocks[index] == NULL)

这种方法具有积极的副作用,不需要预先分配X个Stock对象,其中X是你的hashmap的大小(可能是一个非常大的数字,取决于你想要碰撞的频率)。