如何正确使用remove_if?

How to properly Use remove_if?

本文关键字:if remove 何正确      更新时间:2023-10-16

我正在尝试将remove_if用于数组。该数组包含包含 2 个字符串属性(艺术家和标题(的歌曲对象。我有一个布尔值等于运算符,但在实现方面有问题。下面是我的宋等于运算符:

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;
}

尝试使用 lambda... 如下所示(未测试(。 不要忘记使用"[=]"来捕获范围外的变量。

std::remove_if(songs_.begin(), 
songs_.end(),
[=](Song &s){return (title == s.GetTitle() && artist == s.GetArtist()) ;})