我正在实现一个程序来搜索文件中的字符串。我所做的是要求用户输入文件的文件名和内容,然后用空格作为分隔符标记内容并创建它的哈希表。例:
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
这样的操作.txt这意味着如果用户要求删除 xyz,哈希图应该看起来像
i->abc.txt
m->abc.txt
bad->abc.txt
than->abc.txt
u->abc.txt
所有这些都发生在内存中,我已经创建了自己的hashnode
和hashmap
,而不是使用C++ STL
。
我的哈希节点看起来像这样
class HashNode
{
public:
int key;
string value;
HashNode* next;
HashNode(int key, string value)
{
this->key = key;
this->value = value;
this->next = NULL;
}
};
哈希图是这样的
class HashMap
{
private:
HashNode** htable;
public:
HashMap()
{
htable = new HashNode*[TABLE_SIZE];
for (int i = 0; i < TABLE_SIZE; i++)
htable[i] = NULL;
}
我将如何实现删除文件操作。
您可以为每个文件创建一个 trye。因此,一旦文件被标记为要删除,然后解析 trie 并针对 trie 中的每个单词,从哈希映射中删除相应的键。然后删除trie。否则,对于每个文件,您可以创建一个额外的哈希映射,其中键为字符串,值为 1 ,以将其标记为存在。一旦文件被标记为删除,遍历文件 Hashmap ,对于每个键,删除字符串 -> 文件 hashmap 中的相应条目。trie 将占用更少的内存,并且可能比 hasmap 更快。