У меня есть ряд объектов Task, которые я хотел бы искать по имени. Я могу хранить указатели на них в любой структуре. Я хотел бы разрешить частичное совпадение (например, совпадение «бакалейные товары» «Купить бакалейные товары»).
Я хотел использовать unordered_multimap и equal_range, как показано ниже, но это позволяет только точное соответствие.
class Task_List {
...
std::unordered_multimap<std::string, std::shared_ptr<Task>> tasks_by_name;
...
};
void Task_List::search() {
// Prompt for string_to_search
typedef unordered_multimap<string, shared_ptr<Task>>::iterator multi_iter;
pair<multi_iter, multi_iter> search_results;
search_results = tasks_by_name.equal_range(string_to_search);
...
}
Есть ли способ по-разному определять операторы или задавать определенные функции, чтобы разрешить частичное совпадение? Было бы лучше использовать другую структуру данных или другой подход для эффективного достижения этого?
Спасибо!