我正在实现一个程序来搜索文件中的字符串。我要做的是让用户输入文件的文件名和内容,然后用空格标记化内容作为分隔符,并创建一个哈希表。例如:
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;
}
我如何实现删除文件操作。
答案 0 :(得分:0)
您可以为每个文件创建一个trie。因此,一旦文件被标记为删除,然后通过trie解析并且对于trie中的每个单词,从哈希映射中删除相应的键。然后删除trie。 或者,对于每个文件,您可以创建一个额外的Hashmap,其中键为字符串,值为1,以将其标记为存在。并且一旦文件被标记为删除,则遍历文件Hashmap,并且对于每个密钥,删除字符串中的相应条目 - &gt;文件hashmap。 trie将占用更少的内存,并且可能比hasmap更快。