32 lines
823 B
C++
32 lines
823 B
C++
#include "TopKVideoHolder.h"
|
|
|
|
void TopKVideoHolder::add(const VideoInfo& video) {
|
|
if (pq.size() < K) {
|
|
pq.push(video);
|
|
} else {
|
|
if (VideoCompareWorse()(video, pq.top())) {
|
|
pq.pop();
|
|
pq.push(video);
|
|
}
|
|
}
|
|
}
|
|
|
|
std::vector<VideoInfo> TopKVideoHolder::getSortedVideos() {
|
|
std::vector<VideoInfo> sortedVideos;
|
|
size_t current_size = pq.size();
|
|
if (current_size == 0) return sortedVideos;
|
|
|
|
sortedVideos.reserve(current_size);
|
|
|
|
while (!pq.empty()) {
|
|
sortedVideos.push_back(pq.top());
|
|
pq.pop();
|
|
}
|
|
|
|
std::sort(sortedVideos.begin(), sortedVideos.end(), VideoInfo::compareForFinalSort);
|
|
|
|
return sortedVideos;
|
|
}
|
|
|
|
bool TopKVideoHolder::empty() const { return pq.empty(); }
|
|
size_t TopKVideoHolder::size() const { return pq.size(); } |