Skip to content

Commit 7cb6bcf

Browse files
committed
Some micro optimization of hashmap to use lookup and insert/modify
1 parent 81949ea commit 7cb6bcf

File tree

1 file changed

+18
-28
lines changed

1 file changed

+18
-28
lines changed

lib/core.cpp

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -329,14 +329,12 @@ void ExprBuilder::_add_quadratic_term(IndexT i, IndexT j, CoeffT coeff)
329329
{
330330
std::swap(i, j);
331331
}
332-
auto it = quadratic_terms.find({i, j});
333-
if (it == quadratic_terms.end())
332+
VariablePair vp{i, j};
333+
auto ret = quadratic_terms.emplace(vp, coeff);
334+
if (!ret.second)
334335
{
335-
quadratic_terms.insert({{i, j}, coeff});
336-
}
337-
else
338-
{
339-
it->second += coeff;
336+
auto &iter = ret.first;
337+
iter->second += coeff;
340338
}
341339
}
342340
void ExprBuilder::_set_quadratic_coef(IndexT i, IndexT j, CoeffT coeff)
@@ -345,14 +343,12 @@ void ExprBuilder::_set_quadratic_coef(IndexT i, IndexT j, CoeffT coeff)
345343
{
346344
std::swap(i, j);
347345
}
348-
auto it = quadratic_terms.find({i, j});
349-
if (it == quadratic_terms.end())
350-
{
351-
quadratic_terms.insert({{i, j}, coeff});
352-
}
353-
else
346+
VariablePair vp{i, j};
347+
auto ret = quadratic_terms.emplace(vp, coeff);
348+
if (!ret.second)
354349
{
355-
it->second = coeff;
350+
auto &iter = ret.first;
351+
iter->second = coeff;
356352
}
357353
}
358354
void ExprBuilder::add_quadratic_term(const VariableIndex &i, const VariableIndex &j, CoeffT coeff)
@@ -366,26 +362,20 @@ void ExprBuilder::set_quadratic_coef(const VariableIndex &i, const VariableIndex
366362

367363
void ExprBuilder::_add_affine_term(IndexT i, CoeffT coeff)
368364
{
369-
auto it = affine_terms.find(i);
370-
if (it == affine_terms.end())
365+
auto ret = affine_terms.emplace(i, coeff);
366+
if (!ret.second)
371367
{
372-
affine_terms.insert({i, coeff});
373-
}
374-
else
375-
{
376-
it->second += coeff;
368+
auto &iter = ret.first;
369+
iter->second += coeff;
377370
}
378371
}
379372
void ExprBuilder::_set_affine_coef(IndexT i, CoeffT coeff)
380373
{
381-
auto it = affine_terms.find(i);
382-
if (it == affine_terms.end())
383-
{
384-
affine_terms.insert({i, coeff});
385-
}
386-
else
374+
auto ret = affine_terms.emplace(i, coeff);
375+
if (!ret.second)
387376
{
388-
it->second = coeff;
377+
auto &iter = ret.first;
378+
iter->second = coeff;
389379
}
390380
}
391381
void ExprBuilder::add_affine_term(const VariableIndex &i, CoeffT coeff)

0 commit comments

Comments
 (0)