根据不使用 STL C++中的值从哈希表中删除



我正在实现一个程序来搜索文件中的字符串。我所做的是要求用户输入文件的文件名和内容,然后用空格作为分隔符标记内容并创建它的哈希表。例:

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

所有这些都发生在内存中,我已经创建了自己的hashnodehashmap,而不是使用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 更快。

最新更新