15 #ifndef __defined_libdai_spvector_map_h
16 #define __defined_libdai_spvector_map_h
30 typedef std::pair<size_t, T> nondefault_type;
33 typedef std::map<size_t, T> nondefaults_type;
47 spvector_map() : _p(), _size(0), _def(T()) {}
50 explicit spvector_map(
size_t n, T p ) : _p(), _size(n), _def(p) {}
61 template <
typename TIterator>
62 spvector_map( TIterator begin, TIterator end,
size_t sizeHint, T def=T() ) : _p(), _size(0), _def(def) {
66 for( TIterator it = begin; it != end; it++, iter++ )
68 push_back( iter, *it );
81 spvector_map(
const std::vector<S> &v,
size_t sizeHint, T def=T() ) : _p(), _size(v.size()), _def(def) {
84 for(
size_t i = 0; i < v.size(); i++ )
93 typedef typename nondefaults_type::const_iterator const_iterator;
95 typedef typename nondefaults_type::iterator iterator;
97 typedef typename nondefaults_type::const_reverse_iterator const_reverse_iterator;
99 typedef typename nondefaults_type::reverse_iterator reverse_iterator;
102 iterator begin() {
return _p.begin(); }
104 const_iterator begin()
const {
return _p.begin(); }
107 iterator end() {
return _p.end(); }
109 const_iterator end()
const {
return _p.end(); }
112 reverse_iterator rbegin() {
return _p.rbegin(); }
114 const_reverse_iterator rbegin()
const {
return _p.rbegin(); }
117 reverse_iterator rend() {
return _p.rend(); }
119 const_reverse_iterator rend()
const {
return _p.rend(); }
125 void reserve(
size_t ) {}
128 size_t size()
const {
return _size; }
131 void resize(
size_t n ) {
134 for( iterator it = begin(); it != end(); ) {
144 iterator erase( iterator position ) {
145 iterator next = position;
147 _p.erase( position );
153 void push_back(
size_t idx, T val ) { _p[idx] = val; }
156 void setDefault( T def ) { _def = def; }
159 T getDefault()
const {
return _def; }
162 void clearNonDef() { _p.clear(); }
165 void set(
size_t i, T val ) {
174 T
get(
size_t i )
const {
176 const_iterator it = _p.find( i );
184 T operator[](
size_t i )
const {
return get(i); }
187 bool operator==(
const spvector_map<T>& q )
const {
188 if( size() != q.size() )
191 for(
size_t i = 0; i < size(); i++ )
192 if( !(
get(i) == q.get(i)) )
198 size_t nrNonDef()
const {
return _p.size(); }
201 size_t nrDef()
const {
return _size - _p.size(); }
204 T def()
const {
return _def; }
207 void setDef( T def ) { _def = def; }
210 const nondefaults_type & nonDef()
const {
return _p; }
216 std::ostream& operator << (std::ostream& os, const spvector_map<T> &x) {
218 os <<
"size:" << x.size();
219 os <<
", def:" << x.def();
220 for(
typename spvector_map<T>::const_iterator it = x.begin(); it != x.end(); it++ )
221 os <<
", " << it->first <<
":" << it->second;