Допустим, у меня есть отсортированный вектор строк:
std::vector<std::string> Dictionary
Dictionary.push_back("ant");
Dictionary.push_back("anti-matter");
Dictionary.push_back("matter");
Dictionary.push_back("mate");
Dictionary.push_back("animate");
Dictionary.push_back("animal");
std::sort(Dictionary.begin(), Dictionary.end());
Я хочу найти первое слово в векторе, которое соответствует префиксу, но в каждом найденном мной примере в качестве префикса используется жестко закодированная строка. Например, я могу определить булеву унарную функцию для поиска префикса «an»:
bool find_prefix(std::string &S) {
return S.compare(0, 2, "an");
}
и использовать его в качестве предиката функции std::find_if()
, чтобы найти итератор для первого совпадения. Но как я могу искать строку, заданную пользователем, в качестве префикса? Можно ли каким-то образом использовать бинарные предикаты? Или создать «псевдо-унарный» предикат, который зависит от переменной и параметра?
Или есть какой-нибудь другой контейнер и методы, которые я должен использовать в этой проблеме?
Я знаю, что существуют гораздо более эффективные и элегантные структуры для хранения словаря для поиска по префиксу, но я начинаю заниматься программированием с самообучением, поэтому сначала я хотел бы узнать, как использовать стандартные контейнеры, прежде чем переходить к более сложным структурам.