LeviLamina
Loading...
Searching...
No Matches
MovePriorityQueue.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5template <typename T, typename Comparator = std::less<T>>
7private:
8 using Base = std::vector<T>;
9 using iterator = Base::iterator;
10 using const_iterator = Base::const_iterator;
11
12public:
13 Base mC;
14
15public:
16 [[nodiscard]] T pop() {
17 std::pop_heap(mC.begin(), mC.end(), Comparator{});
18 T result = std::move(mC.back());
19 mC.pop_back();
20 return result;
21 }
22
23 [[nodiscard]] T& top() { return mC.front(); }
24 [[nodiscard]] T const& top() const { return mC.front(); }
25
26 [[nodiscard]] bool empty() { return mC.empty(); }
27
28 [[nodiscard]] size_t size() { return mC.size(); }
29
30 [[nodiscard]] const_iterator begin() const { return mC.begin(); }
31
32 [[nodiscard]] const_iterator end() const { return mC.end(); }
33
34 [[nodiscard]] iterator begin() { return mC.begin(); }
35
36 [[nodiscard]] iterator end() { return mC.end(); }
37
38 [[nodiscard]] Base& getInternalContainer() { return mC; }
39
40 void clear() { mC.clear(); }
41
42 void resort() { std::make_heap(mC.begin(), mC.end(), Comparator{}); }
43};
Definition MovePriorityQueue.h:6