Проверить список(vector) на наличие класса с определенной строкой
Всем привет, у меня есть класс, назовем его CommandExecutor, у которого есть строка, которая возвращает имя этой команды. Все эти команды я храню в списке vector и мне нужно проверить, содержит ли vector команду с тем или иным именем.
class CommandExecutor {
private:
string name;
public:
CommandExecutor(const string& name) {
this->name = name;
}
const string getName() {
return this->name;
}
};
class Test {
private:
vector<CommandExecutor*> commands;
public:
void test() {
commands.push_back(new CommandExecutor("Test1"));
commands.push_back(new CommandExecutor("Test21"));
//И тут дальше надо проверить этот список на наличие команды с именем Test1 или же иным именем
}
};
Есть предположение, что можно проверить через find_if, но я в этом не уверен. Как-то до этого выкручивался, используя цикл, но сейчас хочу упросить весь этот процесс.
И еще хотел бы узнать кое-что. В Java есть такой метод у строки, как startsWith, с помощью которого можно проверить начало строки на тот же префикс например. Есть ли подобная реализация в C++?
Ответы (1 шт):
Автор решения: timur
→ Ссылка
bool startsWith(string str, string with) {
return str.substr(0, with.length()) == with;
}
bool contains(vector<CommandExecutor*> commands, string name) {
return find_if(commands.begin(), commands.end(),
[&](CommandExecutor* com1) { return com1->getName() == name; }) != commands.end();
}