Вот как:
const Movie& MovieRepo::find(const string& title,const string& genre,
const string& star,const int year) const {
auto it = std::find_if(std::cbegin(all), std::cend(all),
[&](const Movie& m) {
return m.getTitle() == title && m.getGenre() == genre &&
m.getStar() == star && m.getYear() == year;
});
if (it != std::cend(all)) return *it;
throw MovieRepoException("Error find");
}
Что касается того, почему - лично я считаю, что явное l oop прекрасно, его легче читать.