use auto for map for-loop

1. reserve vector size in DecisionTreeFactor::apply
2. use auto in range-base for-loop to avoid implictly conversion in VectorValues and DecisionTreeFactor. Some format issues are address, too (add spaces).
release/4.3a0
zubingtan 2023-03-27 11:59:18 +08:00
parent 005c7d4e2d
commit 329041d724
2 changed files with 14 additions and 12 deletions

View File

@ -94,7 +94,10 @@ namespace gtsam {
for (Key j : f.keys()) cs[j] = f.cardinality(j); for (Key j : f.keys()) cs[j] = f.cardinality(j);
// Convert map into keys // Convert map into keys
DiscreteKeys keys; DiscreteKeys keys;
for (const std::pair<const Key, size_t>& key : cs) keys.push_back(key); keys.reserve(cs.size());
for (const auto& key : cs) {
keys.emplace_back(key);
}
// apply operand // apply operand
ADT result = ADT::apply(f, op); ADT result = ADT::apply(f, op);
// Make a new factor // Make a new factor

View File

@ -41,7 +41,7 @@ namespace gtsam {
/* ************************************************************************ */ /* ************************************************************************ */
VectorValues::VectorValues(const Vector& x, const Dims& dims) { VectorValues::VectorValues(const Vector& x, const Dims& dims) {
size_t j = 0; size_t j = 0;
for (const auto& [key,n] : dims) { for (const auto& [key, n] : dims) {
#ifdef TBB_GREATER_EQUAL_2020 #ifdef TBB_GREATER_EQUAL_2020
values_.emplace(key, x.segment(j, n)); values_.emplace(key, x.segment(j, n));
#else #else
@ -68,7 +68,7 @@ namespace gtsam {
VectorValues VectorValues::Zero(const VectorValues& other) VectorValues VectorValues::Zero(const VectorValues& other)
{ {
VectorValues result; VectorValues result;
for(const auto& [key,value]: other) for (const auto& [key, value] : other)
#ifdef TBB_GREATER_EQUAL_2020 #ifdef TBB_GREATER_EQUAL_2020
result.values_.emplace(key, Vector::Zero(value.size())); result.values_.emplace(key, Vector::Zero(value.size()));
#else #else
@ -79,7 +79,7 @@ namespace gtsam {
/* ************************************************************************ */ /* ************************************************************************ */
VectorValues::iterator VectorValues::insert(const std::pair<Key, Vector>& key_value) { VectorValues::iterator VectorValues::insert(const std::pair<Key, Vector>& key_value) {
std::pair<iterator, bool> result = values_.insert(key_value); const std::pair<iterator, bool> result = values_.insert(key_value);
if(!result.second) if(!result.second)
throw std::invalid_argument( throw std::invalid_argument(
"Requested to insert variable '" + DefaultKeyFormatter(key_value.first) "Requested to insert variable '" + DefaultKeyFormatter(key_value.first)
@ -90,7 +90,7 @@ namespace gtsam {
/* ************************************************************************ */ /* ************************************************************************ */
VectorValues& VectorValues::update(const VectorValues& values) { VectorValues& VectorValues::update(const VectorValues& values) {
iterator hint = begin(); iterator hint = begin();
for (const auto& [key,value] : values) { for (const auto& [key, value] : values) {
// Use this trick to find the value using a hint, since we are inserting // Use this trick to find the value using a hint, since we are inserting
// from another sorted map // from another sorted map
size_t oldSize = values_.size(); size_t oldSize = values_.size();
@ -131,10 +131,10 @@ namespace gtsam {
// Change print depending on whether we are using TBB // Change print depending on whether we are using TBB
#ifdef GTSAM_USE_TBB #ifdef GTSAM_USE_TBB
std::map<Key, Vector> sorted; std::map<Key, Vector> sorted;
for (const auto& [key,value] : v) { for (const auto& [key, value] : v) {
sorted.emplace(key, value); sorted.emplace(key, value);
} }
for (const auto& [key,value] : sorted) for (const auto& [key, value] : sorted)
#else #else
for (const auto& [key,value] : v) for (const auto& [key,value] : v)
#endif #endif
@ -344,14 +344,13 @@ namespace gtsam {
} }
/* ************************************************************************ */ /* ************************************************************************ */
VectorValues operator*(const double a, const VectorValues &v) VectorValues operator*(const double a, const VectorValues& c) {
{
VectorValues result; VectorValues result;
for(const VectorValues::KeyValuePair& key_v: v) for (const auto& [key, value] : c)
#ifdef TBB_GREATER_EQUAL_2020 #ifdef TBB_GREATER_EQUAL_2020
result.values_.emplace(key_v.first, a * key_v.second); result.values_.emplace(key, a * value);
#else #else
result.values_.insert({key_v.first, a * key_v.second}); result.values_.insert({key, a * value});
#endif #endif
return result; return result;
} }