引用并插入list <nodes>的向量中

时间:2018-11-16 02:06:55

标签: c++ list vector hash hashtable

我正在实现哈希表,但在实现方面遇到麻烦。经过数小时的搜索,我放弃了,希望看到我可以在这里得到任何帮助。最大的问题是与在HashTable中使用向量有关(对我而言没有意义,而是仅使用list <>但必须使用它)

我的主要问题是如何实现将插入功能添加到HashTable中。

void HashTable::insert(ulint key,ulint value){  //insert data associated with key

   HashNode nodeToAdd;
   nodeToAdd.assign(key, value);

   int index = hash_function(key);

   this->table[index].push_back(nodeToAdd);

   }

现在我正在将HashNode添加到我的HashTable中。

供HashTable参考,该表的字段为

typedef vector <list<HashNode> > Table;
Table *table;

据我所知

   this->table[index].push_back(nodeToAdd);

转到向量HashTable [index],该向量在索引处应该是一个列表。并且到达该列表时,应将新节点推回列表中。

但是,当编译时,我遇到一个错误(没有匹配的函数要调用),并且我不明白为什么。

1 个答案:

答案 0 :(得分:0)

您的列表存储的类型为HashNode的对象,不是类型为HashNode*的对象。

因此,您需要确定要使用的代码,并相应地更改代码。

  1. 如果您想继续存储HashNode,那么您的insert是错误的,它应该在堆栈上创建节点并将其按值存储在列表中。

  2. 如果要存储指针,则您的Table类型是错误的,而应该是vector<list<HashNode*>> -请注意,由于指针不会被自动删除,因此应谨慎管理

就个人而言,我建议您选择#1,这样可以避免很多麻烦。但是,如果您坚持使用#2,那么我建议您停止使用malloc并使用new,或者最好使用std::unique_ptrstd::shared_ptr进行自动生命周期管理。

值得注意的是您的定义Table *table。这令人困惑,因为Table是向量。您的insert函数正在取消引用此指针,希望它可能指向Table值的数组,当您很清楚您实际上认为它是一个向量时。我很确定你不希望它成为一个指针。

由于我只是注意到了这一细节,所以我想这是您错误的 first 来源,因为table[index]实际上是类型Table,而不是类型list<HashNode>并且您试图调用不存在的函数vector<list<HashNode>>::push_back(HashNode*)