Удаление строк из строкового вектора из подстроки

Я реализую алгоритм распространения предложения блока в C++. Я прочитал в файле CNF вектор с каждым предложением в отдельном элементе вектора, например,

1 2 0
1 2 3 0
1 0
3 4 0

Пока я могу выделить отдельные элементы и установить их в виде строки, поэтому в этом примере я установил бы строку равной "1".

Следующим шагом будет удаление всех элементов в векторе, которые содержат 1, поэтому в этом примере будут удалены 1-й, 2-й и 3-й элементы. Однако, когда я запускаю команду удаления вектора

clauses.erase(std::remove(clauses.begin(), clauses.end(), "1"), clauses.end());

Он удалит только те элементы, которые в точности равны "1", а не элементы, содержащие 1, а также другие символы. Есть ли способ удалить какой-либо элемент вектора, который содержит строку?

(Надеюсь, это имеет смысл, спасибо за ваше время)

1 ответ

Решение

Использование std::remove_if и найдите 1 в строке ( живой пример):

clauses.erase(
    std::remove_if(clauses.begin(), clauses.end(), 
        [](const std::string &s) {return s.find('1') != std::string::npos;} 
    ), 
    clauses.end()
);

Если у вас нет C++11 для лямбда-выражения, то нормальная функция или функтор, или Boost-лямбда, или что-то еще, что плавает в вашей лодке, также будут работать.

Другие вопросы по тегам