大家好我正在编写哈希表的代码,我想在删除函数中删除列表中的一些字符串值。
void Hash::remove(string word)
{
int i,flag=0;
list<string>::iterator it;
for(i=0;i<10;i++)
{
for(it=hashTable[i].begin();it!=hashTable[i].end();it++)
{
if(word==*it){
hashTable.erase(it);
break;
}
}
}
}
但是当我编译时遇到错误: 错误:请求成员'erase'在'((Hash *)this) - &gt; Hash :: hashTable',这是非类型'std :: list&gt; [10]”
我无法理解这一点。 请帮帮我。
答案 0 :(得分:0)
使用hashTable[i].erase(it)
代替hashTable.erase(it)
。
答案 1 :(得分:0)
根据您的说明,您似乎要删除与word
匹配的所有元素。不确定为什么要使用两个循环和一个break
语句。您可以使用Erase Remove Idiom有效地从容器中删除元素。
在C ++ 11中,您可以尝试 -
hashTable.erase( std::remove( std::begin(hashTable),
std::end(hashTable),
[word](const std::string& str){ return str == word;} ),
std::end(hashTable) );