Перегрузка, которую вы пытаетесь вызвать, не существует. Вы хотите использовать найти_если:
auto it = std::find_if (v.begin(),v.end(), [&](const pair<string, string> &a)
{
return a.first == name;
}); // name contains the string to find.
Что означает & в [&]. Мне было интересно, как лямбда-функция распознает «имя», если я даже не передам его в find_if и лямбда-функции. Удивительно для меня, но установка & решает эту проблему. Почему?
@Sami Это список захвата лямбда, который фиксирует все в объеме по ссылке.
@Sami В качестве альтернативы, если вы хотите быть более явным, вы также можете указать [&name]
.
std::find()
не позволяет пройти лямбда-компаратор IIRC.