[C++] Heap

| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | template <class T, class Compare = std::less> //디폴트 값은 최소힙입니다.class Heap{public:    struct Comp2    {        bool operator()(const T& lhs, const T& rhs)        {            return Compare()(rhs, lhs);        }    };private:    std::vector datas;public: //기본 생성/대입자    Heap() = default;    virtual ~Heap() = default;    Heap(const Heap&) = default;    Heap(Heap&&) = default;    Heap& operator=(const Heap&) = default;    Heap& operator=(Heap&&) = default;public: //중괄호 초기치 대응    Heap(std::initializer_list init) : datas(init)    {        std::make_heap(datas.begin(), datas.end(), Comp2());    }    Heap& operator=(std::initializer_list init)    {        datas = init;        std::make_heap(datas.begin(), datas.end(), Comp2());    }public: //vector와의 호환용    Heap(const std::vector& vec) : datas(vec)    {        std::make_heap(datas.begin(), datas.end(), Comp2());    }    Heap(std::vector&& vec) : datas(vec)    {        std::make_heap(datas.begin(), datas.end(), Comp2());    }public: //vector와의 호환용    operator const std::vector&() const    {        return datas;    }    operator std::vector && ()    {        return std::move(datas);    }public: //최대 힙을 기준으로, 최대값을 가져옵니다.    T & front()    {        return datas.front();    }    const T& front() const    {        return datas.front();    }public: //요소를 추가합니다.    void push(const T& value)    {        datas.push_back(value);        std::push_heap(datas.begin(), datas.end(), Comp2());    }    void push(T&& value)    {        datas.push_back(std::move(value));        std::push_heap(datas.begin(), datas.end(), Comp2());    }public: //최대 힙을 기준으로, 최대값을 제거합니다.    void pop()    {        std::pop_heap(datas.begin(), datas.end(), Comp2());        datas.pop_back();    }public:    void clear() //힙을 초기화합니다.    {        return datas.clear();    }    bool empty() const //비었으면 true를 반환합니다.    {        return datas.empty();    }    bool not_empty() const //비어있지 않으면 true를 반환합니다.    {        return !datas.empty();    }    size_t size() const //힙의 크기를 반환합니다.    {        return datas.size();    }};Colored by Color Scripter | cs |



여기에 요약글 내용을 입력해 주세요.


여기에 요약글 내용을 입력해 주세요.