在c ++中从列表中删除项目

时间:2014-03-21 22:01:48

标签: c++ hash

大家好我正在编写哈希表的代码,我想在删除函数中删除列表中的一些字符串值。

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]”

我无法理解这一点。 请帮帮我。

2 个答案:

答案 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) );