Advanced Chunk Processing Library 0.2.0
A comprehensive C++ library for advanced data chunking strategies and processing operations
Loading...
Searching...
No Matches
PriorityQueue< T, Compare > Class Template Reference

#include <data_structures.hpp>

Public Member Functions

bool empty () const
 
pop ()
 
void push (const T &item)
 
size_t size () const
 

Private Member Functions

void heapify_down (size_t index)
 
void heapify_up (size_t index)
 

Private Attributes

Compare comp_
 
std::vector< T > heap_
 

Detailed Description

template<typename T, typename Compare = std::less<T>>
class PriorityQueue< T, Compare >

Definition at line 71 of file data_structures.hpp.

Member Function Documentation

◆ empty()

template<typename T , typename Compare = std::less<T>>
bool PriorityQueue< T, Compare >::empty ( ) const
inline

Definition at line 128 of file data_structures.hpp.

128 {
129 return heap_.empty();
130 }
std::vector< T > heap_

References PriorityQueue< T, Compare >::heap_.

Referenced by PriorityQueue< T, Compare >::pop(), and TEST().

◆ heapify_down()

template<typename T , typename Compare = std::less<T>>
void PriorityQueue< T, Compare >::heapify_down ( size_t  index)
inlineprivate

Definition at line 88 of file data_structures.hpp.

88 {
89 while (true) {
90 size_t largest = index;
91 size_t left = 2 * index + 1;
92 size_t right = 2 * index + 2;
93
94 if (left < heap_.size() && comp_(heap_[largest], heap_[left])) {
95 largest = left;
96 }
97 if (right < heap_.size() && comp_(heap_[largest], heap_[right])) {
98 largest = right;
99 }
100
101 if (largest == index) {
102 break;
103 }
104
105 std::swap(heap_[index], heap_[largest]);
106 index = largest;
107 }
108 }

References PriorityQueue< T, Compare >::comp_, and PriorityQueue< T, Compare >::heap_.

Referenced by PriorityQueue< T, Compare >::pop().

◆ heapify_up()

template<typename T , typename Compare = std::less<T>>
void PriorityQueue< T, Compare >::heapify_up ( size_t  index)
inlineprivate

Definition at line 76 of file data_structures.hpp.

76 {
77 while (index > 0) {
78 size_t parent = (index - 1) / 2;
79 if (comp_(heap_[parent], heap_[index])) {
80 std::swap(heap_[parent], heap_[index]);
81 index = parent;
82 } else {
83 break;
84 }
85 }
86 }

References PriorityQueue< T, Compare >::comp_, and PriorityQueue< T, Compare >::heap_.

Referenced by PriorityQueue< T, Compare >::push().

◆ pop()

template<typename T , typename Compare = std::less<T>>
T PriorityQueue< T, Compare >::pop ( )
inline

Definition at line 116 of file data_structures.hpp.

116 {
117 if (empty())
118 throw std::runtime_error("Queue is empty");
119 T result = heap_[0];
120 heap_[0] = heap_.back();
121 heap_.pop_back();
122 if (!empty()) {
123 heapify_down(0);
124 }
125 return result;
126 }
void heapify_down(size_t index)
bool empty() const

References PriorityQueue< T, Compare >::empty(), PriorityQueue< T, Compare >::heap_, and PriorityQueue< T, Compare >::heapify_down().

Referenced by TEST().

◆ push()

template<typename T , typename Compare = std::less<T>>
void PriorityQueue< T, Compare >::push ( const T &  item)
inline

Definition at line 111 of file data_structures.hpp.

111 {
112 heap_.push_back(item);
113 heapify_up(heap_.size() - 1);
114 }
void heapify_up(size_t index)

References PriorityQueue< T, Compare >::heap_, and PriorityQueue< T, Compare >::heapify_up().

Referenced by TEST().

◆ size()

template<typename T , typename Compare = std::less<T>>
size_t PriorityQueue< T, Compare >::size ( ) const
inline

Definition at line 131 of file data_structures.hpp.

131 {
132 return heap_.size();
133 }

References PriorityQueue< T, Compare >::heap_.

Member Data Documentation

◆ comp_

template<typename T , typename Compare = std::less<T>>
Compare PriorityQueue< T, Compare >::comp_
private

◆ heap_


The documentation for this class was generated from the following file: