14 #ifndef INCLUDE_BINARYHEAP_H_
15 #define INCLUDE_BINARYHEAP_H_
39 template <
typename Comparable,
class Compare = std::less<Comparable>>
73 static constexpr Compare
comp = Compare{};
150 void pop(Comparable *minItem);
202 template <
typename Comparable,
class Compare>
204 : current_size_{0}, array_(capacity + 1)
208 template <
typename Comparable,
class Compare>
211 return !current_size_;
214 template <
typename Comparable,
class Compare>
220 template <
typename Comparable,
class Compare>
228 while (hole > 1 && comp(array_[hole / 2], x))
230 array_[hole] = array_[hole / 2];
236 template <
typename Comparable,
class Compare>
238 : current_size_{items.
size()}, array_(items.size() + 11)
240 for (size_type i = 0; i < items.size(); ++i)
242 array_[i + 1] = items[i];
243 array_.
resize(items.size() + 1);
248 template <
typename Comparable,
class Compare>
251 for (
size_type i = current_size_ / 2; i > 0; --i)
257 template <
typename Comparable,
class Compare>
260 auto tmp = std::move(array_[hole]);
263 for (; hole * 2 <= current_size_; hole = child)
267 if (child < current_size_ && comp(array_[child], array_[child + 1]))
272 if (comp(tmp, array_[child]))
274 array_[hole] = std::move(array_[child]);
279 array_[hole] = std::move(tmp);
282 template <
typename Comparable,
class Compare>
289 while (hole > 1 && comp(array_[hole / 2], tmp))
291 array_[hole] = std::move(array_[hole / 2]);
294 array_[hole] = std::move(tmp);
297 template <
typename Comparable,
class Compare>
300 array_[1] = std::move(array_[current_size_--]);
305 template <
typename Comparable,
class Compare>
308 *minItem = std::move(array_[1]);
309 array_[1] = std::move(array_[current_size_--]);
314 template <
typename Comparable,
class Compare>
321 template <
typename Comparable,
class Compare>
324 return array_.
size();