23 #include <gtsam/base/ConcurrentMap.h> 86 typedef std::map<Key, size_t>
Dims;
96 : values_(init.begin(), init.end()) {}
103 template<
class CONTAINER>
104 explicit VectorValues(
const CONTAINER& c) : values_(c.begin(), c.end()) {}
110 template<
typename ITERATOR>
127 size_t size()
const {
return values_.size(); }
130 size_t dim(
Key j)
const {
return at(j).rows(); }
140 iterator item = find(j);
142 throw std::out_of_range(
143 "Requested variable '" + DefaultKeyFormatter(j) +
"' is not in this VectorValues.");
153 const_iterator item = find(j);
155 throw std::out_of_range(
156 "Requested variable '" + DefaultKeyFormatter(j) +
"' is not in this VectorValues.");
178 iterator insert(
const std::pair<Key, Vector>& key_value);
184 template<
class... Args>
185 inline std::pair<VectorValues::iterator, bool>
emplace(
Key j, Args&&... args) {
186 #if ! defined(GTSAM_USE_TBB) || defined (TBB_GREATER_EQUAL_2020) 187 return values_.emplace(std::piecewise_construct, std::forward_as_tuple(j), std::forward_as_tuple(args...));
189 return values_.insert({j, Vector(std::forward<Args>(args)...)});
198 return insert({j, value});
209 inline std::pair<iterator, bool>
tryInsert(
Key j,
const Vector& value) {
210 #ifdef TBB_GREATER_EQUAL_2020 211 return values_.emplace(j, value);
213 return values_.insert({j, value});
220 if (!tryInsert(j, value).second) {
227 if (values_.unsafe_erase(var) == 0)
228 throw std::invalid_argument(
"Requested variable '" +
229 DefaultKeyFormatter(var) +
230 "', is not in this VectorValues.");
236 iterator
begin() {
return values_.begin(); }
237 const_iterator
begin()
const {
return values_.begin(); }
238 iterator
end() {
return values_.end(); }
239 const_iterator
end()
const {
return values_.end(); }
245 iterator
find(
Key j) {
return values_.find(j); }
251 const_iterator
find(
Key j)
const {
return values_.find(j); }
254 GTSAM_EXPORT
friend std::ostream& operator<<(std::ostream&,
const VectorValues&);
257 void print(
const std::string& str =
"VectorValues",
258 const KeyFormatter& formatter = DefaultKeyFormatter)
const;
268 Vector vector()
const;
271 template <
typename CONTAINER>
272 Vector
vector(
const CONTAINER& keys)
const {
275 items.reserve(keys.end() - keys.begin());
276 for (
Key key : keys) {
277 const Vector* v = &at(key);
278 totalDim += v->size();
282 Vector result(totalDim);
284 for (
const Vector* v : items) {
285 result.segment(pos, v->size()) = *v;
293 Vector vector(
const Dims& dims)
const;
314 double squaredNorm()
const;
366 const KeyFormatter& keyFormatter = DefaultKeyFormatter)
const;
371 #ifdef GTSAM_ENABLE_BOOST_SERIALIZATION 373 friend class boost::serialization::access;
374 template<
class ARCHIVE>
375 void serialize(ARCHIVE & ar,
const unsigned int ) {
376 ar & BOOST_SERIALIZATION_NVP(values_);
iterator find(Key j)
Definition: VectorValues.h:245
const_iterator begin() const
Iterator over variables.
Definition: VectorValues.h:237
iterator insert(Key j, const Vector &value)
Definition: VectorValues.h:197
VectorValues(const CONTAINER &c)
Definition: VectorValues.h:104
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: VectorValues.h:83
Values::iterator iterator
Iterator over vector values.
Definition: VectorValues.h:81
double dot(const V1 &a, const V2 &b)
Definition: Vector.h:195
const_iterator find(Key j) const
Definition: VectorValues.h:251
std::string serialize(const T &input)
serializes to a string
Definition: serialization.h:113
Vector & operator[](Key j)
Definition: VectorValues.h:163
A key-value pair, which you get by dereferencing iterators.
Definition: Values.h:90
Definition: Testable.h:152
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
Definition: FastVector.h:34
Variable ordering for the elimination algorithm.
Values::value_type value_type
Typedef to pair<Key, Vector>
Definition: VectorValues.h:84
iterator end()
Iterator over variables.
Definition: VectorValues.h:238
std::map< Key, size_t > Dims
Keyed vector dimensions.
Definition: VectorValues.h:86
Vector & at(Key j)
Definition: VectorValues.h:139
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition: Point2.h:52
Definition: VectorValues.h:74
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition: types.h:108
std::pair< iterator, bool > tryInsert(Key j, const Vector &value)
Definition: VectorValues.h:209
Included from all GTSAM files.
Vector vector(const CONTAINER &keys) const
Definition: VectorValues.h:272
std::pair< VectorValues::iterator, bool > emplace(Key j, Args &&... args)
Definition: VectorValues.h:185
bool exists(Key j) const
Definition: VectorValues.h:133
const Vector & operator[](Key j) const
Definition: VectorValues.h:167
ConcurrentMap< Key, Vector > Values
Collection of Vectors making up a VectorValues.
Definition: VectorValues.h:77
Definition: Testable.h:112
VectorValues()
Default constructor creates an empty VectorValues.
Definition: VectorValues.h:92
void insert_or_assign(Key j, const Vector &value)
Definition: VectorValues.h:219
GTSAM_EXPORT void print(const Matrix &A, const std::string &s, std::ostream &stream)
VectorValues(ITERATOR first, ITERATOR last)
Definition: VectorValues.h:111
size_t dim(Key j) const
Definition: VectorValues.h:130
Values values_
Vectors making up this VectorValues.
Definition: VectorValues.h:78
value_type KeyValuePair
Typedef to pair<Key, Vector>
Definition: VectorValues.h:85
Values::const_iterator const_iterator
Const iterator over vector values.
Definition: VectorValues.h:82
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: Key.h:35
Maps global variable indices to slot indices.
VectorValues(const VectorValues &c)
Definition: VectorValues.h:107
A thin wrapper around std::vector that uses a custom allocator.
Definition: chartTesting.h:28
typedef and functions to augment Eigen's VectorXd
VectorValues(std::initializer_list< std::pair< Key, Vector >> init)
Construct from initializer list.
Definition: VectorValues.h:95
GTSAM_EXPORT Errors operator-(const Errors &a, const Errors &b)
Subtraction.
std::string html(const DiscreteValues &values, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DiscreteValues::Names &names={})
Free version of html.
void erase(Key var)
Definition: VectorValues.h:226
const_iterator end() const
Iterator over variables.
Definition: VectorValues.h:239
size_t size() const
Definition: VectorValues.h:127
const Vector & at(Key j) const
Definition: VectorValues.h:152
iterator begin()
Iterator over variables.
Definition: VectorValues.h:236
GTSAM_EXPORT Errors operator+(const Errors &a, const Errors &b)
Addition.
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:102