我正在尝试将remove_if用于数组。该数组包含歌曲的对象,其中包含2个字符串属性(艺术家和标题)。我有一个bool equals运算符但是在实现方面存在问题。下面是我的歌曲等于运算符:
bool Song::operator==(const Song& s) const
{
return (title_ == s.GetTitle() && artist_ == s.GetArtist()) ? true : false;
}
我有另一个功能,如果标题或艺术家匹配传递给它的参数,它应该删除歌曲。然后返回删除的歌曲数量:
unsigned int Playlist::RemoveSongs(const string& title, const string& artist)
{
int startSize = songs_.size();
Song s = Song(title,artist);
// below are some of the things I've attempted from documentation
//songs_.remove_if(std::bind2nd(std::ptr_fun(Song::operator()(s))));
//std::remove_if(songs_.begin(),songs_.end(),s);
int endSize = songs_.size();
return startSize - endSize;
}
答案 0 :(得分:0)
尝试使用lambda ... 像下面的东西(未测试)。 不要忘记使用“[=]”来捕获范围变量。
std::remove_if(songs_.begin(),
songs_.end(),
[=](Song &s){return (title == s.GetTitle() && artist == s.GetArtist()) ;})