diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.cpp b/alib2data/src/automaton/FSM/EpsilonNFA.cpp index 4678063669fc614e1c95eb01c8d106279a85cba8..456d1de406c748d872b4d02df25ab8bc66063f61 100644 --- a/alib2data/src/automaton/FSM/EpsilonNFA.cpp +++ b/alib2data/src/automaton/FSM/EpsilonNFA.cpp @@ -132,15 +132,12 @@ std::map<State, std::set<State> > EpsilonNFA::getEpsilonTransitionsFromState(con if( states.find(from) == states.end()) throw AutomatonException("State \"" + (std::string) from.getName() + "\" doesn't exist"); - std::map<State, std::set<State> > transitionsFromState; - for (std::map<std::pair<State, std::variant<string::Epsilon, alphabet::Symbol> >, std::set<State> >::const_iterator transition = transitions.begin(); transition != transitions.end(); - transition++) { - if (transition->first.first == from && transition->first.second.is<string::Epsilon>()) { - transitionsFromState[transition->first.first].insert(transition->second.begin(), transition->second.end()); - } - } - - return transitionsFromState; + std::pair<State, std::variant<string::Epsilon, alphabet::Symbol> > key(from, std::variant<string::Epsilon, alphabet::Symbol>(string::Epsilon::EPSILON)); + std::map<State, std::set<State>> res; + auto transition = transitions.find(key); + if(transition != transitions.end()) + res.insert(std::make_pair(from, transition->second)); + return res; } std::map<std::pair<State, alphabet::Symbol>, std::set<State> > EpsilonNFA::getSymbolTransitionsFromState(const State& from) const {