Merge pull request #1740 from arutkowski/VectorValues_sorted
commit
4abef9248e
|
@ -64,6 +64,13 @@ namespace gtsam {
|
|||
}
|
||||
}
|
||||
|
||||
/* ************************************************************************ */
|
||||
std::map<Key, Vector> VectorValues::sorted() const {
|
||||
std::map<Key, Vector> ordered;
|
||||
for (const auto& kv : *this) ordered.emplace(kv);
|
||||
return ordered;
|
||||
}
|
||||
|
||||
/* ************************************************************************ */
|
||||
VectorValues VectorValues::Zero(const VectorValues& other)
|
||||
{
|
||||
|
@ -130,11 +137,7 @@ namespace gtsam {
|
|||
GTSAM_EXPORT std::ostream& operator<<(std::ostream& os, const VectorValues& v) {
|
||||
// Change print depending on whether we are using TBB
|
||||
#ifdef GTSAM_USE_TBB
|
||||
std::map<Key, Vector> sorted;
|
||||
for (const auto& [key, value] : v) {
|
||||
sorted.emplace(key, value);
|
||||
}
|
||||
for (const auto& [key, value] : sorted)
|
||||
for (const auto& [key, value] : v.sorted())
|
||||
#else
|
||||
for (const auto& [key,value] : v)
|
||||
#endif
|
||||
|
@ -176,7 +179,12 @@ namespace gtsam {
|
|||
// Copy vectors
|
||||
Vector result(totalDim);
|
||||
DenseIndex pos = 0;
|
||||
#ifdef GTSAM_USE_TBB
|
||||
// TBB uses un-ordered map, so inefficiently order them:
|
||||
for (const auto& [key, value] : sorted()) {
|
||||
#else
|
||||
for (const auto& [key, value] : *this) {
|
||||
#endif
|
||||
result.segment(pos, value.size()) = value;
|
||||
pos += value.size();
|
||||
}
|
||||
|
@ -392,9 +400,7 @@ namespace gtsam {
|
|||
// Print out all rows.
|
||||
#ifdef GTSAM_USE_TBB
|
||||
// TBB uses un-ordered map, so inefficiently order them:
|
||||
std::map<Key, Vector> ordered;
|
||||
for (const auto& kv : *this) ordered.emplace(kv);
|
||||
for (const auto& kv : ordered) {
|
||||
for (const auto& kv : sorted()) {
|
||||
#else
|
||||
for (const auto& kv : *this) {
|
||||
#endif
|
||||
|
|
|
@ -77,6 +77,9 @@ namespace gtsam {
|
|||
typedef ConcurrentMap<Key, Vector> Values; ///< Collection of Vectors making up a VectorValues
|
||||
Values values_; ///< Vectors making up this VectorValues
|
||||
|
||||
/** Sort by key (primarily for use with TBB, which uses an unordered map)*/
|
||||
std::map<Key, Vector> sorted() const;
|
||||
|
||||
public:
|
||||
typedef Values::iterator iterator; ///< Iterator over vector values
|
||||
typedef Values::const_iterator const_iterator; ///< Const iterator over vector values
|
||||
|
|
Loading…
Reference in New Issue