Как правильно использовать remove_if? - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь использовать 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;
}

1 Ответ

0 голосов
/ 19 мая 2018

Попробуйте использовать лямбду ... Что-то вроде ниже (не проверено).Не забудьте использовать «[=]» для захвата переменных из области видимости.

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