tuple, DocumentStatus> SearchServer::MatchDocument( const std::execution::parallel_policy& policy, const string &raw_query, int document_id ) const { const auto query = ParseQuery(raw_query); vector matched_words(query.plus_words.size()); vector minus_words(query.minus_words.size()); std::transform( policy, query.minus_words.begin(), query.minus_words.end(), minus_words.begin(), [](const string &word){return &word;} ); if( any_of( policy, minus_words.begin(), minus_words.end(), [&](auto& word){ //std::cout << word << endl; return word_to_document_freqs_.at(*word).count(document_id); } ) ) { //cout << "!"<{}, documents_.at(document_id).status}; } vector plus_words( query.plus_words.begin(),query.plus_words.end() ); { auto it_end = copy_if( policy, plus_words.begin(), plus_words.end(), matched_words.begin(), [&](string& word){ return word_to_document_freqs_.at(word).count(document_id); } ); matched_words.erase(it_end, matched_words.end()); } sort(policy, matched_words.begin(),matched_words.end()); { auto it_end = unique( policy, matched_words.begin(), matched_words.end() ); matched_words.erase(it_end, matched_words.end()); } return {matched_words, documents_.at(document_id).status}; }