45#ifndef OR_TOOLS_MATH_OPT_CORE_SPARSE_VECTOR_VIEW_H_
46#define OR_TOOLS_MATH_OPT_CORE_SPARSE_VECTOR_VIEW_H_
56#include "google/protobuf/message.h"
57#include "absl/container/flat_hash_map.h"
58#include "absl/types/span.h"
62#include "ortools/math_opt/sparse_containers.pb.h"
69template <
typename SparseVector>
111 bool at_end =
false);
121 inline const_iterator
begin()
const;
122 inline const_iterator
end()
const;
124 absl::Span<const int64_t>
ids()
const {
return ids_; }
127 absl::Span<const T>
values()
const {
return values_; }
132 template <
typename IndexType>
133 absl::flat_hash_map<IndexType, T>
as_map();
136 absl::Span<const int64_t> ids_;
137 absl::Span<const T> values_;
143template <
typename Collection,
typename T =
typename Collection::value_type>
145 const Collection& values) {
154 const google::protobuf::RepeatedPtrField<T>& values) {
161template <
typename SparseVectorProto,
162 typename T = sparse_value_type<SparseVectorProto>>
179SparseVectorView<T>::const_iterator::const_iterator(
180 const SparseVectorView<T>* view,
bool at_end)
183 index_ = view_->ids_size();
188typename SparseVectorView<T>::const_iterator::reference
190 return {view_->ids(index_), view_->values(index_)};
212 return index_ == other.index_;
218 return !(*
this == other);
235template <
typename IndexType>
237 absl::flat_hash_map<IndexType, T> result;
238 CHECK_EQ(ids_size(), values_size());
239 result.reserve(ids_size());
240 for (
const auto& [
id,
value] : *
this) {
#define CHECK_EQ(val1, val2)
#define DCHECK_LT(val1, val2)
#define DCHECK_EQ(val1, val2)
bool operator!=(const const_iterator &other) const
reference operator*() const
internal::ArrowOperatorProxy< reference > operator->() const
std::forward_iterator_tag iterator_category
SparseVectorView::value_type value_type
const_iterator & operator++()
bool operator==(const const_iterator &other) const
const_iterator begin() const
SparseVectorView(absl::Span< const int64_t > ids, absl::Span< const T > values)
std::pair< int64_t, T > value_type
const T & values(int index) const
absl::Span< const int64_t > ids() const
absl::Span< const T > values() const
const_iterator end() const
absl::flat_hash_map< IndexType, T > as_map()
int64_t ids(int index) const
void InsertOrDie(Collection *const collection, const typename Collection::value_type &value)
typename std::remove_reference< decltype(SparseVector().values())>::type::value_type sparse_value_type
SparseVectorView< T > MakeView(absl::Span< const int64_t > ids, const Collection &values)
bool operator!=(const LinearConstraint &lhs, const LinearConstraint &rhs)
Collection of objects used to extend the Constraint Solver library.
LinearExpr operator*(LinearExpr lhs, double rhs)
LinearRange operator==(const LinearExpr &lhs, const LinearExpr &rhs)
std::optional< int64_t > end
std::vector< int64_t > ids