diff --git a/lib_vector_search/include/word_list.h b/lib_vector_search/include/word_list.h index ba8b22f..3c0b5d9 100644 --- a/lib_vector_search/include/word_list.h +++ b/lib_vector_search/include/word_list.h @@ -22,6 +22,8 @@ public: class WordRefList : public std::vector { public: + WordRefList(const WordList &source); + static void find_prefix_in_range( const WordRefList &word_list, const std::string_view &search_prefix, size_t start_index, size_t end_index, diff --git a/lib_vector_search/src/sorted_linear_finder.cpp b/lib_vector_search/src/sorted_linear_finder.cpp index 6e8fbc1..3648bb2 100644 --- a/lib_vector_search/src/sorted_linear_finder.cpp +++ b/lib_vector_search/src/sorted_linear_finder.cpp @@ -1,15 +1,11 @@ #include "sorted_linear_finder.h" #include -#include using std::forward_list, std::string, std::string_view; -SortedLinearFinder::SortedLinearFinder(const WordList &word_list) { - std::transform(word_list.cbegin(), word_list.cend(), - std::back_inserter(word_list_), - [](const string &word) { return &word; }); - +SortedLinearFinder::SortedLinearFinder(const WordList &word_list) + : word_list_(word_list) { std::sort( word_list_.begin(), word_list_.end(), [](const string *left, const string *right) { return *left < *right; }); diff --git a/lib_vector_search/src/word_list.cpp b/lib_vector_search/src/word_list.cpp index dc91ede..e810451 100644 --- a/lib_vector_search/src/word_list.cpp +++ b/lib_vector_search/src/word_list.cpp @@ -77,6 +77,12 @@ void WordList::find_prefix_in_range( } }; +WordRefList::WordRefList(const WordList &source) { + for (const auto &word : source) { + push_back(&word); + } +} + void WordRefList::find_prefix_in_range( const WordRefList &word_list, const std::string_view &search_prefix, size_t start_index, size_t end_index,