Seredenko-V

ExploreKeyWords_v3

Aug 7th, 2022 (edited)
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1. Stats CalculateStats(const KeyWords& key_words, vector<string>::iterator begin_range, vector<string>::iterator end_range) {
  2.     Stats stats_one_string;
  3.     for (vector<string>::iterator it_all_string = begin_range; it_all_string != end_range; ++it_all_string) {
  4.         vector<string_view> words = SplitIntoWords(*it_all_string);
  5.         for (vector<string_view>::iterator it = words.begin(); it != words.end(); ++it) {
  6.             if (key_words.count(*it)) {
  7.                 stats_one_string.word_frequences[string(*it)]++;
  8.             }
  9.         }
  10.     }
  11.     return stats_one_string;
  12. }
  13.  
  14. Stats ExploreKeyWords(const KeyWords& key_words, istream& input) {
  15.     Stats statistics;
  16.     vector<string> content;
  17.     while (!input.eof()) {
  18.         string text;
  19.         getline(input, text);
  20.         if (text.empty()) {
  21.             break;
  22.         }
  23.         if (!CheckPrintSymbols(text)) {
  24.             return statistics;
  25.         }
  26.         content.push_back(move(text));
  27.     }
  28.  
  29.     vector<string>::iterator begin_range = content.begin();
  30.     vector<string>::iterator end_range = content.end();
  31.     const size_t distance = content.end() - content.begin();
  32.     const size_t part_length = max(1, static_cast<int>(distance) / 3);
  33.     vector<string>::iterator middle_left = begin_range + part_length;
  34.     vector<string>::iterator middle_right = end_range - part_length;
  35.  
  36.     future<Stats> first_part = async([&key_words, begin_range, middle_left] {
  37.         return CalculateStats(key_words, begin_range, middle_left); });
  38.     future<Stats> second_part = async([&key_words, middle_left, middle_right] {
  39.         return CalculateStats(key_words, middle_left, middle_right); });
  40.  
  41.     statistics += CalculateStats(key_words, middle_right, end_range);
  42.     statistics += first_part.get();
  43.     statistics += second_part.get();
  44.  
  45.     return statistics;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment