Как удалить элементы из std::list<std::pair<>>;

89
07 февраля 2022, 12:40

Помогите удалить элементы из 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

Answer 1

У вас нет операторов == для 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());
}
READ ALSO
Python + MySQL Не происходит заполнение БД

Python + MySQL Не происходит заполнение БД

Попытался связать бота в телеграм с базой данных, но возникла проблема с её заполнениемИнформация в БД не обновляется, скорее всего это связано...

104
Порядок отображения current_timestamp

Порядок отображения current_timestamp

Есть таблица , в нем current_timestamp , ну и данные получаются вот так

101
else if() Почему именно так?

else if() Почему именно так?

Чем конструкция

117