Имею метод, который должен из некоторой базы данных удалять записи, соответствующие условию:
template <class F>
int RemoveIf(F predicate)
{
int count = 0;
for (auto item : storage)
{
auto mark = stable_partition(item.second.begin(), item.second.end(), predicate(item.first, string event_));
count += distance(mark, item.second.end());
item.second.erase(mark, item.second.end());
}
return count;
}
Здесь storage - это
map<Date, set<string>>
(Date - свой тип данных), а predicate - лямбда-функция. И вот в чём проблема. Я знаю, что если в stable_partition передать некоторый диапазон, то в качестве аргумента в функцию сравнения он будет передавать все элементы этого диапазона по очереди. Но моей лямбда-функции нужны два аргумента. И менять её, скорее всего, нельзя. Выглядит она так:
auto predicate = [condition](const Date& date, const string& event) {
return condition->Evaluate(date, event);
};
Отсюда вопрос. Как передать два аргумента в лямбда-функцию?