9 #ifndef snap_core_priorityqueue_h
10 #define snap_core_priorityqueue_h
23 void Insert(
const TVal& X,
float Priority) {
58 IAssertR(
Size() > 0,
"Attempt to query max priority of empty priority queue.");
63 IAssertR(
Size() > 0,
"Attempt to query max priority of empty priority queue.");
94 int Parent(
int i) {
return (i + 1) / 2 - 1; }
95 int Left(
int i) {
return i * 2 + 1; }
96 int Right(
int i) {
return i * 2 + 2; }
99 Priorities.
Swap(i, j);
100 IndexToVal.
Swap(i, j);
101 ValToIndex.
GetDat(IndexToVal[i]) = i;
102 ValToIndex.
GetDat(IndexToVal[j]) = j;
108 if (
Left(i) < Priorities.
Len() && Priorities[
Left(i)] > Priorities[largest]) {
111 if (
Right(i) < Priorities.
Len() && Priorities[
Right(i)] > Priorities[largest]) {
#define IAssertR(Cond, Reason)
float GetPriority(const TVal &X)
void GetPriorities(THash< TVal, TFlt > &Result)
TSizeTy Len() const
Returns the number of elements in the vector.
const TDat & GetDat(const TKey &Key) const
void Swap(TVec< TVal, TSizeTy > &Vec)
Swaps the contents of the vector with Vec.
void DelKey(const TKey &Key)
void SetPriority(const TVal &X, float NewPriority)
void Insert(const TVal &X, float Priority)
THash< TVal, int > ValToIndex
bool IsKey(const TKey &Key) const
TSizeTy Add()
Adds a new element at the end of the vector, after its current last element.
void DelLast()
Removes the last element of the vector.
TDat & AddDat(const TKey &Key)