diff --git a/gtsam/linear/HessianFactor.cpp b/gtsam/linear/HessianFactor.cpp index 8a9adf6f6..6a980eac2 100644 --- a/gtsam/linear/HessianFactor.cpp +++ b/gtsam/linear/HessianFactor.cpp @@ -313,11 +313,9 @@ VectorValues HessianFactor::hessianDiagonal() const { /* ************************************************************************* */ void HessianFactor::hessianDiagonalAdd(VectorValues &d) const { for (DenseIndex j = 0; j < (DenseIndex)size(); ++j) { - auto item = d.find(keys_[j]); - if(item != d.end()) { - item->second += info_.diagonal(j); - } else { - d.emplace(keys_[j], info_.diagonal(j)); + auto result = d.emplace(keys_[j], info_.diagonal(j)); + if(!result.second) { + result.first->second += info_.diagonal(j); } } } diff --git a/gtsam/linear/JacobianFactor.cpp b/gtsam/linear/JacobianFactor.cpp index d0e702f06..af2aa5f45 100644 --- a/gtsam/linear/JacobianFactor.cpp +++ b/gtsam/linear/JacobianFactor.cpp @@ -552,28 +552,15 @@ VectorValues JacobianFactor::hessianDiagonal() const { void JacobianFactor::hessianDiagonalAdd(VectorValues& d) const { for (size_t pos = 0; pos < size(); ++pos) { Key j = keys_[pos]; - auto item = d.find(j); + size_t nj = Ab_(pos).cols(); + auto result = d.emplace(j, nj); - if(item != d.end()) { - size_t nj = Ab_(pos).cols(); - Vector& dj = item->second; - for (size_t k = 0; k < nj; ++k) { - Vector column_k = Ab_(pos).col(k); - if (model_) - model_->whitenInPlace(column_k); - dj(k) += dot(column_k, column_k); - } - } else { - size_t nj = Ab_(pos).cols(); - Vector dj(nj); - for (size_t k = 0; k < nj; ++k) { - Vector column_k = Ab_(pos).col(k); - if (model_) - model_->whitenInPlace(column_k); - dj(k) = dot(column_k, column_k); - } - - d.emplace(j, dj); + Vector& dj = result.first->second; + for (size_t k = 0; k < nj; ++k) { + Vector column_k = Ab_(pos).col(k); + if (model_) + model_->whitenInPlace(column_k); + dj(k) += dot(column_k, column_k); } } } diff --git a/gtsam/slam/RegularImplicitSchurFactor.h b/gtsam/slam/RegularImplicitSchurFactor.h index 342dc5c65..4443d6a6d 100644 --- a/gtsam/slam/RegularImplicitSchurFactor.h +++ b/gtsam/slam/RegularImplicitSchurFactor.h @@ -172,11 +172,9 @@ public: dj(k) -= FtE.row(k) * PointCovariance_ * FtE.row(k).transpose(); } - auto item = d.find(j); - if(item != d.end()) { - item->second += dj; - } else { - d.emplace(j, dj); + auto result = d.emplace(j, dj); + if(!result.second) { + result.first->second += dj; } } }