diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index e100f5e48f63e6588f1bdca434c17a32b4579190..9b288c7ac0f9d7431c445515ba2979d12d7ef358 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -5677,9 +5677,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) @@ -5687,16 +5686,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 4d0ef7519a8fd192e6a2ae80b6b19870fc94e975..a83bb6d2975b0e71f4e6f4cae98a89671b675243 100644 --- a/src/ExprNode.cc +++ b/src/ExprNode.cc @@ -3530,7 +3530,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