Advertisement
AlexDanilin

Урок 4: Поиск в отсортированном векторе, словаре и множестве. 4.2

Jul 20th, 2023
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.31 KB | None | 0 0
  1. //Урок 4: Поиск в отсортированном векторе, словаре и множестве. 4.2
  2.  
  3. #include <vector>
  4. #include <algorithm>
  5. #include <iostream>
  6. #include <set>
  7.  
  8. using namespace std;
  9.  
  10.  
  11.  
  12. template <typename RandomIt>
  13. pair<RandomIt, RandomIt> FindStartsWith(RandomIt range_begin, RandomIt range_end, char prefix) {
  14.     // напишите реализацию    
  15.     auto lower = lower_bound(range_begin, range_end, string(1, prefix));  
  16.     auto upper = lower_bound(range_begin, range_end, string(1, (prefix + 1)));  
  17.     return make_pair(lower, upper);
  18. }
  19.  
  20. /*
  21. //авторское
  22. template <typename RandomIt>
  23. pair<RandomIt, RandomIt> FindStartsWith(RandomIt range_begin, RandomIt range_end, char prefix) {
  24.     // Все строки, начинающиеся с '<prefix>', больше или равны строке "<prefix>"
  25.     auto left = lower_bound(range_begin, range_end, string(1, prefix));
  26.  
  27.     // Составим следующий в алфавите символ.
  28.     // Не страшно, если prefix = 'z':
  29.     //в этом случае мы получим следующий за 'z' символ в таблице символов
  30.     char next_prefix = static_cast<char>(prefix + 1);
  31.  
  32.     // Строка "<next_prefix>" в рамках буквенных строк
  33.     // является точной верхней гранью
  34.     // множества строк, начнающихся с '<prefix>'
  35.     auto right = lower_bound(range_begin, range_end, string(1, next_prefix));
  36.  
  37.     return {left, right};
  38. }*/
  39.    
  40.    
  41.  
  42.  
  43. int main() {
  44.     const vector<string> sorted_strings = {"moscow", "murmansk", "vologda"};
  45.     const auto m_result = FindStartsWith(begin(sorted_strings), end(sorted_strings), 'm');
  46.     for (auto it = m_result.first; it != m_result.second; ++it) {
  47.         cout << *it << " ";
  48.     }
  49.     cout << endl;
  50.     const auto p_result = FindStartsWith(begin(sorted_strings), end(sorted_strings), 'p');
  51.     cout << (p_result.first - begin(sorted_strings)) << " " << (p_result.second - begin(sorted_strings)) << endl;
  52.     const auto z_result = FindStartsWith(begin(sorted_strings), end(sorted_strings), 'z');
  53.     cout << (z_result.first - begin(sorted_strings)) << " " << (z_result.second - begin(sorted_strings)) << endl;
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement