// Lugar para su MinHeap de la semana 13. REEMPLACEN este archivo por el suyo:
//
//     cp ../week-13/lab/min_heap.h lab/min_heap.h
//
// Mientras no lo hagan, compila, pero el programa se detiene al usar el heap.
#ifndef MIN_HEAP_H
#define MIN_HEAP_H

#include <cstddef>
#include <functional>
#include <utility>
#include <vector>

#include "not_implemented.h"

template <typename T, typename Less = std::less<T>>
class MinHeap {
public:
    MinHeap() = default;
    explicit MinHeap(Less less) : less_(std::move(less)) {}
    explicit MinHeap(std::vector<T> items, Less less = Less()) : items_(std::move(items)), less_(std::move(less)) {
        not_implemented("MinHeap: copien su min_heap.h de la semana 13");
    }
    void push(T) { not_implemented("MinHeap: copien su min_heap.h de la semana 13"); }
    void pop() { not_implemented("MinHeap: copien su min_heap.h de la semana 13"); }
    const T& top() const { not_implemented("MinHeap: copien su min_heap.h de la semana 13"); }
    bool empty() const { not_implemented("MinHeap: copien su min_heap.h de la semana 13"); }
    std::size_t size() const { not_implemented("MinHeap: copien su min_heap.h de la semana 13"); }
    void check_invariants() const { not_implemented("MinHeap: copien su min_heap.h de la semana 13"); }

private:
    std::vector<T> items_;
    Less less_{};
};

#endif
