我不能完全编码如何在特定哈希值下打印此链表中的所有值?
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.
}
}
那么,基本上我在添加评论的部分有疑问吗?
答案 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);
最后,我想你对哈希表和无序地图(顺便说一下,它们并不完全相同)有充分的理解,我认为你应该阅读更多关于这个主题的内容