diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index 453aa9c5a432968605c7324ffa0358c1d5121c08..57d059ebc180b3c97df465151cf25be9d13f2c1a 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -6313,9 +6313,8 @@ DynamicModel::substituteUnaryOps(const vector<int> &eqnumbers) set<int> used_local_vars; for (int eqnumber : eqnumbers) equations[eqnumber]->collectVariables(SymbolType::modelLocalVariable, used_local_vars); - for (auto &it : local_variables_table) - if (used_local_vars.find(it.first) != used_local_vars.end()) - it.second->findUnaryOpNodesForAuxVarCreation(nodes); + for (int mlv : used_local_vars) + local_variables_table[mlv]->findUnaryOpNodesForAuxVarCreation(nodes); // Mark unary ops to be substituted in selected equations for (int eqnumber : eqnumbers) @@ -6323,16 +6322,16 @@ DynamicModel::substituteUnaryOps(const vector<int> &eqnumbers) // Substitute in model local variables vector<BinaryOpNode *> neweqs; - for (auto &it : local_variables_table) - it.second = it.second->substituteUnaryOpNodes(nodes, subst_table, neweqs); + for (int mlv : used_local_vars) + local_variables_table[mlv] = local_variables_table[mlv]->substituteUnaryOpNodes(nodes, subst_table, neweqs); // Substitute in equations - for (auto &equation : equations) + for (int eq : eqnumbers) { - auto substeq = dynamic_cast<BinaryOpNode *>(equation-> + auto substeq = dynamic_cast<BinaryOpNode *>(equations[eq]-> substituteUnaryOpNodes(nodes, subst_table, neweqs)); assert(substeq); - equation = substeq; + equations[eq] = substeq; } // Add new equations diff --git a/src/ExprNode.cc b/src/ExprNode.cc index 218f0793cab4b8256e6b4b36cee43485eedd9391..ca91b7438521891d4492121882715c8dac339d0d 100644 --- a/src/ExprNode.cc +++ b/src/ExprNode.cc @@ -3614,7 +3614,9 @@ UnaryOpNode::substituteUnaryOpNodes(const lag_equivalence_table_t &nodes, subst_ else subst_table[rit->second] = dynamic_cast<VariableNode *>(aux_var->decreaseLeadsLags(base_index - rit->first)); - return const_cast<VariableNode *>(subst_table.find(this)->second); + assert(subst_table.find(this) != subst_table.end()); + + return const_cast<VariableNode *>(subst_table.at(this)); } expr_t