Помогите удалить элементы из std::list>;
Следующий код:
class A
{
//
};
class C
{
//
};
using B = std::function<void(C&, const sf::Event &)>;
std::list<std::pair<A, B>> leres;
int main()
{
for (auto itr = leres.begin(); itr != leres.end(); ++itr)
{
leres.remove(*itr);
}
return 0;
}
Не компилируется. Ошибка: error C2678: бинарный "==": не найден оператор, принимающий левый операнд типа "const _Ty1" (или приемлемое преобразование отсутствует) 1> with
У вас нет операторов ==
для A
и B
, соответственно, нет такового и для pair<A,B>
, так что операция remove()
, которая должна сравнивать каждый элемент с указанным значением, делать это не в состоянии.
Воспользуйтесь для удаления конкретного элемента по итератору функцией erase()
. Нет никакого смысла, получив итератор, превращать его в значение и вновь выполнять поиск - уже в remove
.
Но, похоже, вы просто хотите удалить в цикле все элементы, полностью очистив список, нет? Если да - вызовите leres.clear()
и не мучайтесь...
Update
Изменения в вопрос внесли ничего нового. В любом случае требуется сравнение элементов в списке. Т.е. пар. Которое в общем случае выполняется путем сравнения элементов. Можно просто написать свой компаратор для сравнения элементов (пар) и передать его в список при создании.
Даю пару решений (тела операторов, понятно, не более чем заглушки).
class A
{
};
class B
{
};
bool operator==(const A&,const A&) { return true; }
bool operator==(const B&,const B&) { return true; }
std::list<std::pair<A, B>> leres;
int main()
{
leres.remove(*leres.begin());
}
или
class A
{
};
class B
{
};
bool operator==(const pair<A,B>&,const pair<A,B>&) { return true; }
std::list<std::pair<A, B>> leres;
int main()
{
leres.remove(*leres.begin());
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Попытался связать бота в телеграм с базой данных, но возникла проблема с её заполнениемИнформация в БД не обновляется, скорее всего это связано...
Есть таблица , в нем current_timestamp , ну и данные получаются вот так