Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 引用并插入到列表_C++_List_Vector_Hash_Hashtable - Fatal编程技术网

C++ 引用并插入到列表

C++ 引用并插入到列表,c++,list,vector,hash,hashtable,C++,List,Vector,Hash,Hashtable,我正在实现一个哈希表,但在实现过程中遇到了问题。在谷歌上搜索了几个小时后,我已经放弃了,希望能在这里得到任何帮助。最大的问题是在HashTable中使用向量对我来说没有意义,而只是使用列表,但使用它是必需的 我的主要问题是如何实现insert函数以添加到哈希表中 void HashTable::insert(ulint key,ulint value){ //insert data associated with key HashNode nodeToAdd; nodeToAdd

我正在实现一个哈希表,但在实现过程中遇到了问题。在谷歌上搜索了几个小时后,我已经放弃了,希望能在这里得到任何帮助。最大的问题是在HashTable中使用向量对我来说没有意义,而只是使用列表,但使用它是必需的

我的主要问题是如何实现insert函数以添加到哈希表中

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中

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);

   }
对于哈希表中的引用,该表的字段为

typedef vector <list<HashNode> > Table;
Table *table;
将转到向量哈希表[index],该表在索引处应为列表。当它到达该列表时,它应该将新节点推回到列表中


然而,在编译时,我遇到了一个错误,没有匹配的函数可以调用,我不明白为什么。

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

因此,您需要决定要使用哪一个,并相应地更改代码

如果您想继续存储HashNode,那么您的插入是错误的——它应该在堆栈上创建节点,并在列表中按值存储

如果您想存储指针,那么您的表类型是错误的,应该改为向量-注意,应该小心管理它,因为指针不会自动删除

就个人而言,我建议你选择1,这样可以省去很多麻烦。但是如果您坚持使用2,那么我建议您停止使用malloc,使用new,或者更好的方法是使用std::unique\u ptr或std::shared\u ptr进行自动生命周期管理

同样值得注意的是定义表*表。这是令人困惑的,因为表是一个向量。您的insert函数正在取消对该指针的引用,希望它可能指向一个表值数组,但很明显您实际上认为它是一个向量。我很确定你不想让它成为一个指针


因为我只注意到了详细信息,我想这是您的错误的第一个来源,因为表[index ]实际上是类型表,而不是类型列表,您试图调用不存在的函数向量::PuxiBuffHasNoj.*/P>使用MALOC的任何C++代码都被破坏了。malloc代表C代码。即使HashNode是一个POD,也应该使用new。否则,一些无辜的非POD成员将被添加到HashNode中,稍后,您将开始疑惑为什么所有这些神秘的崩溃开始发生,到处都是。最后,处理编译错误的正确方法是尝试理解它们的含义,而不是运行Google搜索“我如何做X”。不幸的是,我被迫使用给定的类def,因此必须使用Table*Table。也许是我误解了typedef,但是typedef行不是使表等同于向量吗?所以我认为Table*Table是向量型的?1是的;2不!表*是一个指针,所以它等价于向量*