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;
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) {}
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; }
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;
81 ++m_by_objective_value_it;
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;