std :: векторные элементы удаления, которые выполняют некоторые условия

Поскольку заголовок говорит, что я хочу удалить/объединить объекты в вектор, который выполняет определенные условия. Я имею в виду, что я знаю, как удалить целые числа из вектора, который имеет значение 99, например.

Устранение идиомы Скоттом Мейерсом:

vector<int> v;
v.erase(remove(v.begin(), v.end(), 99), v.end());

Но предположим, что если есть вектор объектов, который содержит переменную члена задержки. И теперь я хочу исключить все объекты, задержки которых отличаются только от определенного порога и хотят объединить/объединить их с одним объектом.

Результатом процесса должен быть вектор объектов, где разница всех задержек должна быть как минимум указанного порога.

Ответ 1

std::remove_if приходит на помощь!

99 будет заменен UnaryPredicate который будет фильтровать ваши задержки, для которых я собираюсь использовать функцию лямбда.

И вот пример:

v.erase(std::remove_if(
    v.begin(), v.end(),
    [](const int& x) { 
        return x > 10; // put your condition here
    }), v.end());

Ответ 2

Использование предикатной функции (идиоматический способ в С++ 11):

v.erase(remove_if(
            v.begin(), v.end(), bind(greater<int>(), _1, 99)),
        v.end());