237 |
238 |
238 template <typename T1, typename C1 = std::less<T1> > |
239 template <typename T1, typename C1 = std::less<T1> > |
239 struct rebind { |
240 struct rebind { |
240 typedef StdMap<Key, T1, C1> other; |
241 typedef StdMap<Key, T1, C1> other; |
241 }; |
242 }; |
|
243 }; |
|
244 |
|
245 /// \brief Map for storing values for the range \c [0..size-1] range keys |
|
246 /// |
|
247 /// The current map has the \c [0..size-1] keyset and the values |
|
248 /// are stored in a \c std::vector<T> container. It can be used with |
|
249 /// some data structures, for example \c UnionFind, \c BinHeap, when |
|
250 /// the used items are small integer numbers. |
|
251 template <typename T> |
|
252 class IntegerMap { |
|
253 |
|
254 template <typename T1> |
|
255 friend class IntegerMap; |
|
256 |
|
257 public: |
|
258 |
|
259 typedef True ReferenceMapTag; |
|
260 ///\e |
|
261 typedef int Key; |
|
262 ///\e |
|
263 typedef T Value; |
|
264 ///\e |
|
265 typedef T& Reference; |
|
266 ///\e |
|
267 typedef const T& ConstReference; |
|
268 |
|
269 private: |
|
270 |
|
271 typedef std::vector<T> Vector; |
|
272 Vector _vector; |
|
273 |
|
274 public: |
|
275 |
|
276 /// Constructor with specified default value |
|
277 IntegerMap(int size = 0, const T& value = T()) : _vector(size, value) {} |
|
278 |
|
279 /// \brief Constructs the map from an appropriate std::vector. |
|
280 template <typename T1> |
|
281 IntegerMap(const std::vector<T1>& vector) |
|
282 : _vector(vector.begin(), vector.end()) {} |
|
283 |
|
284 /// \brief Constructs a map from an other IntegerMap. |
|
285 template <typename T1> |
|
286 IntegerMap(const IntegerMap<T1> &c) |
|
287 : _vector(c._vector.begin(), c._vector.end()) {} |
|
288 |
|
289 /// \brief Resize the container |
|
290 void resize(int size, const T& value = T()) { |
|
291 _vector.resize(size, value); |
|
292 } |
|
293 |
|
294 private: |
|
295 |
|
296 IntegerMap& operator=(const IntegerMap&); |
|
297 |
|
298 public: |
|
299 |
|
300 ///\e |
|
301 Reference operator[](Key k) { |
|
302 return _vector[k]; |
|
303 } |
|
304 |
|
305 /// \e |
|
306 ConstReference operator[](Key k) const { |
|
307 return _vector[k]; |
|
308 } |
|
309 |
|
310 /// \e |
|
311 void set(const Key &k, const T& t) { |
|
312 _vector[k] = t; |
|
313 } |
|
314 |
242 }; |
315 }; |
243 |
316 |
244 /// @} |
317 /// @} |
245 |
318 |
246 /// \addtogroup map_adaptors |
319 /// \addtogroup map_adaptors |