@originalnii

Как передать в лямбда функцию два аргумента?

Имею метод, который должен из некоторой базы данных удалять записи, соответствующие условию:

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);
            };

Отсюда вопрос. Как передать два аргумента в лямбда-функцию?
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Вам поможет std::bind.

Передавайте в partition
std::bind(predicate, item.first, std::placeholders::_1)
в качестве предиката.

Edit:

Но тут у вас будет другая проблема. set - не vector. Вы не сможете его передать stable_partition. Вместо ручного применения stable_partition, используйте erase_if. Предикат туда также через std::bind передавайте.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы