This repository has been archived on 2024-12-15. You can view files and clone it, but cannot push or open issues or pull requests.
VectorSearch/lib_vector_search/include/tree_finder.h

36 lines
698 B
C
Raw Permalink Normal View History

2024-03-20 14:05:25 +00:00
#pragma once
#include "finder.h"
2024-03-21 07:55:44 +00:00
#include "word_list.h"
2024-03-20 14:05:25 +00:00
2024-03-22 14:37:13 +00:00
#include <unordered_map>
2024-03-20 14:05:25 +00:00
class SearchTreeNode {
private:
WordRefList words_;
2024-03-23 12:43:58 +00:00
std::unordered_map<char, SearchTreeNode *> children_;
2024-03-20 14:05:25 +00:00
public:
2024-03-23 12:43:58 +00:00
~SearchTreeNode();
void insert(std::string_view partial_word, const std::string *original_word);
2024-03-20 14:05:25 +00:00
const SearchTreeNode *find(std::string_view search_term) const;
WordRefList words() const;
2024-03-20 14:05:25 +00:00
};
class SearchTree : public SearchTreeNode {
public:
2024-03-21 07:55:44 +00:00
SearchTree(const WordList &word_list);
2024-03-20 14:05:25 +00:00
};
class TreeFinder : public Finder {
private:
SearchTree search_tree_;
public:
2024-03-21 07:55:44 +00:00
TreeFinder(const WordList &word_list);
2024-03-20 14:05:25 +00:00
WordRefList find_prefix(std::string_view search_term) const override;
2024-03-20 14:05:25 +00:00
};