feat: add sorted linear finder

This commit is contained in:
Michael Mandl 2024-03-20 20:50:43 +01:00
parent 291d8d198e
commit 26d3839832
Signed by: mandlm
GPG key ID: 4AA25D647AA54CC7
5 changed files with 80 additions and 6 deletions

View file

@ -0,0 +1,32 @@
#include "sorted_linear_finder.h"
#include <algorithm>
#include <iterator>
using std::vector, std::forward_list, std::string, std::string_view;
SortedLinearFinder::SortedLinearFinder(const vector<string> &word_list) {
std::transform(word_list.cbegin(), word_list.cend(),
std::back_inserter(word_list_),
[](const string &word) { return &word; });
std::sort(
word_list_.begin(), word_list_.end(),
[](const string *left, const string *right) { return *left < *right; });
}
forward_list<const string *>
SortedLinearFinder::find_prefix(string_view search_term) const {
forward_list<const string *> matching_words;
bool in_range = false;
for (const auto *word : word_list_) {
if (word->starts_with(search_term)) {
matching_words.push_front(word);
in_range = true;
} else if (in_range) {
break;
}
}
return matching_words;
}