18 using by_objective_value_t = std::multimap<double, NodeT>;
19 using by_level_t = std::multimap<unsigned int, NodeT>;
20 by_objective_value_t m_by_objective_value;
21 by_level_t m_by_level;
28 [[nodiscard]] ByObjectiveValueNodes by_objective_value()
const {
return ByObjectiveValueNodes(m_by_objective_value); }
29 [[nodiscard]] ByLevelNodes by_level()
const {
return ByLevelNodes(m_by_level); }
35 [[nodiscard]]
bool empty()
const;
37 [[nodiscard]]
unsigned int size()
const {
return m_by_objective_value.size(); }
48 using by_objective_value_it_t =
typename by_objective_value_t::const_iterator;
49 using by_level_it_t =
typename by_level_t::const_iterator;
51 bool m_is_by_level =
true;
52 by_objective_value_it_t m_by_objective_value_it;
53 by_level_it_t m_by_level_it;
55 const_iterator() =
default;
56 const_iterator(by_objective_value_it_t t_it) : m_by_objective_value_it(std::move(t_it)), m_is_by_level(
false) {}
57 const_iterator(by_level_it_t t_it) : m_by_level_it(std::move(t_it)), m_is_by_level(
true) {}
58 bool operator!=(
const const_iterator& t_rhs)
const {
59 if (m_is_by_level != t_rhs.m_is_by_level) {
63 return m_by_level_it != t_rhs.m_by_level_it;
65 return m_by_objective_value_it != t_rhs.m_by_objective_value_it;
68 [[nodiscard]]
bool is_by_level()
const {
return m_is_by_level; }
70 const_iterator& operator=(
const const_iterator& t_rhs) {
71 if (
this == &t_rhs) {
return *
this; }
72 m_by_level_it = t_rhs.m_by_level_it;
73 m_by_objective_value_it = t_rhs.m_by_objective_value_it;
74 m_is_by_level = t_rhs.m_is_by_level;
77 const_iterator& operator++() {
81 ++m_by_objective_value_it;
85 const_iterator& operator--() {
89 --m_by_objective_value_it;
93 const NodeT& operator*()
const {
95 return m_by_level_it->second;
97 return m_by_objective_value_it->second;
100 const NodeT* operator->()
const {
102 return &m_by_level_it->second;
104 return &m_by_objective_value_it->second;