基于C ++中不使用STL的值从HashTable中删除

时间:2017-02-09 03:45:14

标签: c++ hashmap hashtable

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

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

所有这一切都发生在记忆中,我创建了自己的hashnodehashmap,而没有使用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;

            }

我如何实现删除文件操作。

1 个答案:

答案 0 :(得分:0)

您可以为每个文件创建一个trie。因此,一旦文件被标记为删除,然后通过trie解析并且对于trie中的每个单词,从哈希映射中删除相应的键。然后删除trie。 或者,对于每个文件,您可以创建一个额外的Hashmap,其中键为字符串,值为1,以将其标记为存在。并且一旦文件被标记为删除,则遍历文件Hashmap,并且对于每个密钥,删除字符串中的相应条目 - &gt;文件hashmap。 trie将占用更少的内存,并且可能比hasmap更快。