我正在实现一个程序来搜索文件中的字符串。我做的是我要求用户输入文件的名称和文件的内容,然后用空格标记内容作为分隔符并创建它的哈希表。例如:从HashTable删除基于C++值不使用STL
filename-abc.txt content- i am bad than u filename-xyz.txt content-u r awesome
。
我的哈希表如下所示:
i->abc.txt
m->abc.txt
bad->abc.txt
than->abc.txt
u->abc.txt->xyz.txt
r->xyz.txt
awesome->xyz.txt
我不得不做了很多操作,但一个这样的操作是delete the filename
这意味着,如果用户要求删除xyz.txt将该,HashMap的应该像
i->abc.txt
m->abc.txt
bad->abc.txt
than->abc.txt
u->abc.txt
所有这一切都在内存中发生的事情,我已经创建了自己的hashnode
和hashmap
,不使用C++ STL
。
我HashNode看起来像这样
class HashNode
{
public:
int key;
string value;
HashNode* next;
HashNode(int key, string value)
{
this->key = key;
this->value = value;
this->next = NULL;
}
};
的Hashmap是这样
class HashMap
{
private:
HashNode** htable;
public:
HashMap()
{
htable = new HashNode*[TABLE_SIZE];
for (int i = 0; i < TABLE_SIZE; i++)
htable[i] = NULL;
}
我将如何执行删除文件操作。
根据你的代码,删除'filename'只是一个从单个链表中删除一个节点的任务。但是你需要解析存在于你的散列表的每个索引上的链表。您可以创建第二个hastable来代替解析完整的散列表,告诉您哪个文件存在于第一个散列表的哪个索引处。 – sameerkn