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