#pragma once
#include <set>
#include <vector>
* In-memory ordered TopN buffer.
* Stores comboIds (long), sorted by Comparator.
* Uses multiset so equal-sort rows can coexist.
*/
template <typename Comparator>
class SetTopNBuffer {
public:
using Buffer = std::multiset<long, Comparator>;
explicit SetTopNBuffer(Comparator cmp)
: buffer_(cmp), bufferId(-99) {}
inline auto begin() { return buffer_.begin(); }
inline auto end() { return buffer_.end(); }
inline bool AddElement(long id) {
buffer_.insert(id);
return true;
}
inline void RemoveSmallestElement() {
if (!buffer_.empty()) {
auto it = buffer_.end();
--it;
buffer_.erase(it);
}
}
inline int GetSize() const { return (int)buffer_.size(); }
inline long GetSmallestElement() const {
auto it = buffer_.end();
--it;
return *it;
}
inline void LoadFromPlainVector(const std::vector<long>& plain) {
buffer_.clear();
buffer_.insert(plain.begin(), plain.end());
}
inline std::vector<long>* ToPlainVector() const {
return new std::vector<long>(buffer_.begin(), buffer_.end());
}
inline void SetBufferId(int id) { bufferId = id; }
inline int GetBufferId() const { return bufferId; }
private:
Buffer buffer_;
int bufferId;
};