Удаление строк из строкового вектора из подстроки
Я реализую алгоритм распространения предложения блока в 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-лямбда, или что-то еще, что плавает в вашей лодке, также будут работать.