如何在哈希表中打印此链表中的所有值?

时间:2015-06-08 17:37:04

标签: c++

我不能完全编码如何在特定哈希值下打印此链表中的所有值?

    unordered_map<string,list<string>> myhash;
    unordered_map<string,list<string>>::iterator it;
    for ( i = 0; i < N; i++ )
    {
        string foo = arr[i];
        sort(foo.begin(),foo.end());
        myhash[foo] = list.insert(arr[i]); // Is this the correct way of inserting elements in the linked list?
    }
    for ( i = 0; i < N; i++ )
    {
        string foo = arr[i];
        sort(foo.begin(),foo.end());
        it = myhash.find(foo);
        if ( it!= myhash.end() )
        {
            //if the key value is found, I want to print all elements in the linked list present at that key value.
           // also, after printing all the elements, I want to delete that key from the hash table.
        } 

    }

那么,基本上我在添加评论的部分有疑问吗?

2 个答案:

答案 0 :(得分:2)

我很困惑你在做什么oO

这就是你要找的东西吗?

std::unorderd_map<std::string, std::list<std::string>> hash_map;

// fill map
....

// go to hash
std::string hash = "whatever";
std::unorderd_map<std::string, std::list<std::string>>::iterator itr;
itr = hash_map.find(hash);

// check if value exists
if(itr == hash_map.end())
   std::cout << "not in map ... " << std::endl;
else {
   // print everything
   const std::list<std::string> & hash_list = (*itr).second;
   for(const std::string & value : hash_list)
      std::cout << value << std::endl;

   // sry edit of course the delete
   hash_map.erase(itr);
}

答案 1 :(得分:0)

我想弄清楚你要做什么,但你提供的代码不够清楚。

首先,你的代码不应该编译;在第7行,我假设你试图在myhash[foo]的列表中插入元素,你试图通过&#34;列表&#34;来访问列表。 class,你也使用了明确不起作用的赋值运算符。 如果我假设的是正确的话,你应该做的是将arr [i]直接插入[]运算符(foo键的列表)返回的特定列表中,这样,

myhash[foo].insert(arr[i]);

另外,在第13行,你用一个字符串参数调用find函数,这显然不会起作用,因为你的unordered_map是由列表而不是字符串组成的,字符串是你的情况下的键,如果你想要的话要找到某个键​​的列表,您可以立即执行:myhash[foo]。 如果你想在myhash [foo]的列表中找到一个特定的字符串,那就这样做吧

it = myhash[foo].find(foo);

在这种情况下,您的运营商应该以这种方式定义,

list<string>::iterator it;

关于您放置的最后一条评论,要打印列表,您所要做的就是使用*运算符来获取列表然后打印它的迭代器。

    for(list<string>::iterator it_list = (*it).begin(); it_list!= (*it).end(); it_list++) 
cout<<*it_list;

并删除列表:myhash.erase(it);

最后,我想你对哈希表和无序地图(顺便说一下,它们并不完全相同)有充分的理解,我认为你应该阅读更多关于这个主题的内容