void Print (vector<pair<int, string>> v) {
for(auto& p : v) {
auto[_int, _str] = Unpack(p);
cout << p.first << " " << p.second << endl;
}
}
int main()
{
vector<pair<int, string>> v = {{1,"b"}, {2, "z"}, {1, "a"}};
Print(v);
/*
1 b
2 z
1 a
*/
auto predicate = [](const int _int, const string _str) {
return _int != 1 || _str == "b";
};
auto it = remove_if(begin(v), end(v), predicate);
v.erase(it, end(v));
Print(v);
/* I want:a
1 a
*/
}
Итак, это часть курса Яндекса по С ++: ссылка на курс
Предикат предопределен, и я не могу его изменить.Это лямбда-функция, принимающая 2 аргумента.Все указывает на то, что я должен использовать этот предикат как часть функции remove_if.
Как передать два аргумента в предикат?
Я пробовал:
auto it = remove_if(begin(v), end(v), predicate(auto[_int, _str] = Unpack(p)));
, но это не работает ...Есть идеи?Спасибо заранее!