5#include <unordered_map>
18template<
class PriorityType>
20 using PriorityTypePointer = std::shared_ptr<PriorityType>;
30 explicit BucketPriorityQueue(
size_t nrBuckets,
double lowerValue,
double ratio,
bool higher);
48 std::size_t
size()
const;
54 PriorityTypePointer
const&
top()
const;
60 void push(PriorityTypePointer
const& item);
67 void update(PriorityTypePointer
const& item,
double oldPriority);
73 PriorityTypePointer
pop();
79 void print(std::ostream& out)
const;
93 size_t getBucket(
double priority)
const;
96 std::vector<std::vector<PriorityTypePointer>> buckets;
99 std::vector<PriorityTypePointer> immediateBucket;
102 size_t currentBucket;
105 size_t nrUnsortedItems;
108 std::function<bool(PriorityTypePointer, PriorityTypePointer)> compare;
115 bool AUTOSORT =
false;
Priority queue based on buckets.
void update(PriorityTypePointer const &item, double oldPriority)
Update existing element.
void print(std::ostream &out) const
Print info about priority queue.
void push(PriorityTypePointer const &item)
Add element.
BucketPriorityQueue(BucketPriorityQueue const &queue)=default
PriorityTypePointer const & top() const
Get element with highest priority.
virtual ~BucketPriorityQueue()=default
PriorityTypePointer pop()
Get element with highest priority and remove it from the queue.
std::size_t size() const
Return number of entries.
void printSizes(std::ostream &out) const
Print sizes of buckets.
bool empty() const
Check whether queue is empty.