Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <typename DocumentPredicate>
- [[nodiscard]] bool FindTopDocuments(const string& raw_query, DocumentPredicate document_predicate,
- vector<Document>& result) const
- {
- const Query query = ParseQuery(raw_query);
- auto matched_documents = FindAllDocuments(query, document_predicate);
- sort(matched_documents.begin(), matched_documents.end(), [](const Document& lhs, const Document& rhs) {
- if (abs(lhs.relevance - rhs.relevance) < 1e-6) {
- return lhs.rating > rhs.rating;
- } else {
- return lhs.relevance > rhs.relevance;
- }
- });
- if (matched_documents.size() > MAX_RESULT_DOCUMENT_COUNT) {
- matched_documents.resize(MAX_RESULT_DOCUMENT_COUNT);
- }
- result = matched_documents;
- return true;
- }
- [[nodiscard]] bool FindTopDocuments(const string& raw_query, vector<Document>& result) const
- {
- result.emplace_back(FindTopDocuments(raw_query, DocumentStatus::ACTUAL));
- return true;
- }
- [[nodiscard]] bool FindTopDocuments(const string& raw_query, DocumentStatus status,
- vector<Document>& result) const
- {
- result.emplace_back(FindTopDocuments(raw_query, [&status, result]([[maybe_unused]]int document_id,
- DocumentStatus document_status, [[maybe_unused]]int rating)
- {
- return document_status == status;
- });
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement