There is a correctly working pattern for finding a range of lines in the vector that start with a specific character.
template <typename RandomIt> std::pair<RandomIt, RandomIt> FindStartsWith( RandomIt range_begin, RandomIt range_end, char prefix) { std::string target1 = {prefix}; auto first = std::lower_bound(range_begin, range_end, target1); auto next = static_cast<char>(prefix + 1); std::string target2 = {next}; auto last = std::upper_bound(range_begin, range_end, target2); return std::make_pair(first, last); }; The prefix string option gives incorrect results. Tell me what could be the error.
template <typename RandomIt> std::pair<RandomIt, RandomIt> FindStartsWith( RandomIt range_begin, RandomIt range_end, const std::string& prefix) { std::string target = prefix; auto first = std::lower_bound(range_begin, range_end, target); ++target[prefix.size() - 1]; auto last = std::upper_bound(range_begin, range_end, target); return std::make_pair(first, last); };