Advertisement
chevengur

СПРИНТ № 5 | Алгоритмы поиска | Урок 4: Поиск в отсортированном векторе, словаре и множестве 3/3

Feb 10th, 2024
998
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.71 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <string>
  4. #include <vector>
  5.  
  6. using namespace std;
  7. template <typename RandomIt>
  8. pair<RandomIt, RandomIt> FindStartsWith(RandomIt range_begin, RandomIt range_end, string prefix) {
  9.     // Все строки, начинающиеся с prefix, больше или равны строке "<prefix>"
  10.     auto left = lower_bound(range_begin, range_end, prefix);
  11.     // Составим строку, которая в рамках буквенных строк является точной верхней гранью
  12.     // множества строк, начинающихся с prefix
  13.     string upper_bound = prefix;
  14.     ++upper_bound[upper_bound.size() - 1];
  15.     // Первое встреченное слово, не меньшее upper_bound, обязательно является концом полуинтервала
  16.     auto right = lower_bound(range_begin, range_end, upper_bound);
  17.     return {left, right};
  18. }
  19.  
  20. int main() {
  21.     const vector<string> sorted_strings = {"moscow", "motovilikha", "murmansk"};
  22.     const auto mo_result = FindStartsWith(begin(sorted_strings), end(sorted_strings), "mo");
  23.     for (auto it = mo_result.first; it != mo_result.second; ++it) {
  24.         cout << *it << " ";
  25.     }
  26.     cout << endl;
  27.     const auto mt_result = FindStartsWith(begin(sorted_strings), end(sorted_strings), "mt");
  28.     cout << (mt_result.first - begin(sorted_strings)) << " " << (mt_result.second - begin(sorted_strings)) << endl;
  29.     const auto na_result = FindStartsWith(begin(sorted_strings), end(sorted_strings), "na");
  30.     cout << (na_result.first - begin(sorted_strings)) << " " << (na_result.second - begin(sorted_strings)) << endl;
  31.     return 0;
  32. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement