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