Advertisement
YaMolekula

search_server: parallel

Mar 8th, 2023
586
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.70 KB | Fixit | 0 0
  1. tuple<vector<string>, DocumentStatus> SearchServer::MatchDocument(
  2.     const std::execution::parallel_policy& policy,
  3.     const string &raw_query,
  4.     int document_id
  5. ) const
  6. {
  7.     const auto query = ParseQuery(raw_query);
  8.     vector<string> matched_words(query.plus_words.size());
  9.     vector<const string*> minus_words(query.minus_words.size());
  10.    
  11.     std::transform(
  12.         policy,
  13.         query.minus_words.begin(),
  14.         query.minus_words.end(),
  15.         minus_words.begin(),
  16.         [](const string &word){return &word;}
  17.     );
  18.     if(
  19.         any_of(
  20.             policy, minus_words.begin(), minus_words.end(),
  21.             [&](auto& word){
  22.                 //std::cout << word << endl;
  23.                 return word_to_document_freqs_.at(*word).count(document_id);
  24.             }
  25.         )
  26.     )
  27.     {
  28.         //cout << "!"<<endl;
  29.         return {vector<string>{}, documents_.at(document_id).status};
  30.     }
  31.    
  32.     vector<string> plus_words(
  33.         query.plus_words.begin(),query.plus_words.end()
  34.     );
  35.     {
  36.         auto it_end = copy_if(
  37.             policy,
  38.             plus_words.begin(),
  39.             plus_words.end(),
  40.             matched_words.begin(),
  41.             [&](string& word){
  42.                 return word_to_document_freqs_.at(word).count(document_id);
  43.             }
  44.         );
  45.         matched_words.erase(it_end, matched_words.end());
  46.     }
  47.     sort(policy, matched_words.begin(),matched_words.end());
  48.     {
  49.         auto it_end = unique(
  50.             policy,
  51.             matched_words.begin(),
  52.             matched_words.end()
  53.         );
  54.         matched_words.erase(it_end, matched_words.end());
  55.     }
  56.     return {matched_words, documents_.at(document_id).status};
  57. }
  58.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement