Advertisement
Evgenistan

Untitled

Aug 13th, 2022 (edited)
914
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     template <typename DocumentPredicate>
  2.     [[nodiscard]] bool FindTopDocuments(const string& raw_query, DocumentPredicate document_predicate,
  3.                                         vector<Document>& result) const
  4.     {
  5.         const Query query = ParseQuery(raw_query);
  6.         auto matched_documents = FindAllDocuments(query, document_predicate);
  7.  
  8.         sort(matched_documents.begin(), matched_documents.end(), [](const Document& lhs, const Document& rhs) {
  9.             if (abs(lhs.relevance - rhs.relevance) < 1e-6) {
  10.                 return lhs.rating > rhs.rating;
  11.             } else {
  12.                 return lhs.relevance > rhs.relevance;
  13.             }
  14.         });
  15.         if (matched_documents.size() > MAX_RESULT_DOCUMENT_COUNT) {
  16.             matched_documents.resize(MAX_RESULT_DOCUMENT_COUNT);
  17.         }
  18.         result = matched_documents;
  19.  
  20.         return true;
  21.     }  
  22.  
  23.     [[nodiscard]] bool FindTopDocuments(const string& raw_query, vector<Document>& result) const
  24.     {
  25.         result.emplace_back(FindTopDocuments(raw_query, DocumentStatus::ACTUAL));
  26.         return true;
  27.     }
  28.    
  29.     [[nodiscard]] bool FindTopDocuments(const string& raw_query, DocumentStatus status,
  30.     vector<Document>& result) const
  31.     {
  32.  
  33.     result.emplace_back(FindTopDocuments(raw_query, [&status, result]([[maybe_unused]]int document_id,
  34.     DocumentStatus document_status, [[maybe_unused]]int rating)
  35.         {
  36.  
  37.             return document_status == status;
  38.  
  39.         });
  40. return true;
  41.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement