#pragma once #include "finder.h" #include #include class SearchTreeNode { private: std::forward_list words_; std::map children_; public: void insert(std::string_view partial_word, const string *original_word); const SearchTreeNode *find(std::string_view search_term) const; std::forward_list words() const; }; class SearchTree : public SearchTreeNode { public: SearchTree(const std::vector &word_list); }; class TreeFinder : public Finder { private: SearchTree search_tree_; public: TreeFinder(const std::vector &word_list); virtual std::forward_list find_prefix(std::string_view search_term) const override; };