45 explicit BinaryHeap(
uint04 size)
48 void insert(t_comp_type comparison, t_value_type value)
50 const uint04 length = m_values.size();
51 m_values.add({ value, comparison });
63 [[nodiscard]] t_comp_type extremeComp()
const
65 return m_values[0].second;
67 [[nodiscard]] t_value_type extremeValue()
const
69 return m_values[0].first;
75 [[nodiscard]]
uint04 size()
const
77 return m_values.size();
85 BinaryHeap heap = *
this;
87 sorted_values.setSize(m_values.size());
88 uint04 size = m_values.size();
91 sorted_values[i] = heap.m_values[0];
98 BinaryHeap heap = *
this;
100 sorted_values.setSize(m_values.size());
101 uint04 size = m_values.size();
104 sorted_values[i] = heap.m_values[0].first;
105 heap.deleteExtreme();
107 return sorted_values;
109 [[nodiscard]] t_value_type replaceExtreme(t_comp_type comparison, t_value_type value)
111 t_value_type extreme = m_values[0];
112 m_values[0].first = value;
113 m_values[0].second = comparison;
116 [[nodiscard]] t_value_type popExtreme()
118 t_value_type extreme = m_values[0].first;
124 m_values[0] = m_values.last();
125 m_values.removeLast();
129 void bubbleDown(
uint04 index)
131 const uint04 length = m_values.size();
134 uint04 left = (index << 1) + 1;
141 if (Compare(m_values[best].second, m_values[left].second))
144 if (right < length && Compare(m_values[best].second, m_values[right].second))
150 m_values.swapIndices(index, best);
157 void bubbleUp(
uint04 index)
163 uint04 parent_index = ((index - 1) >> 1);
164 if (Compare(m_values[parent_index].second, m_values[index].second))
166 m_values.swapIndices(index, parent_index);
167 index = parent_index;
173 static bool Compare(t_comp_type a, t_comp_type b)
175 if constexpr (t_is_min)