我正在尝试编写一个函数,如果ID匹配,它将替换一组歌曲。
我对lambda表达式仍然有些困惑。
我正在尝试使用replace_if,但不确定如何在表达式中引用原始歌曲。
m_songs是一组歌曲对象
我想用m_song中与newSong共享ID的任何歌曲替换。
因此,基本上我如何从replace_if语句中的m_songs中获取ID?
std::replace_if(m_songs.begin(), m_songs.end(),
newSong.getID() == (One of the m_songs?)getID() , newSong) ;
最佳答案
Song newSong = ...;
std::replace_if(std::begin(m_songs), std::end(m_songs), [&newSong](const &Song song) {
return newSong.getID() == song.getID();
}, newSong);
您也可以使用以下语法捕获ID(假设id是一个字符串):
[std::string id = std::move(newSong.getID()](const &Song song) { return id == song.getID(); }
lambda函数通过引用捕获
newSong
并能够在lambda中使用它,现在您要做的就是对照调用lambda的每首歌曲检查ID。replace_if
方法对歌曲集中的每首歌曲调用lambda函数,因此您无需再次遍历该方法中的所有歌曲