1#ifndef DA_ORDER_SMALL_MAP_H
2#define DA_ORDER_SMALL_MAP_H
17template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY = QList< KEY >,
typename CONTAINTER_VALUE = QList< VALUE > >
19template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY = std::vector< KEY >,
typename CONTAINTER_VALUE = std::vector< VALUE > >
27 typedef VALUE value_type;
34 bool contains(
const KEY& key)
const;
37 int count(
const KEY& key)
const;
49 const VALUE& first()
const;
52 const KEY& firstKey()
const;
61 VALUE& operator[](
const KEY& key);
72 typename CONTAINTER_KEY::iterator mIteKey;
73 typename CONTAINTER_VALUE::iterator mIteValue;
76 typedef std::bidirectional_iterator_tag iterator_category;
77 typedef qptrdiff difference_type;
78 typedef VALUE value_type;
79 typedef VALUE* pointer;
80 typedef VALUE& reference;
85 inline iterator(
typename CONTAINTER_KEY::iterator ki,
typename CONTAINTER_VALUE::iterator vi)
86 : mIteKey(ki), mIteValue(vi)
90 inline const KEY& key()
const
95 inline VALUE& value()
const
100 inline VALUE& operator*()
const
105 inline VALUE* operator->()
const
107 return (&(*mIteValue));
110 inline bool operator==(
const iterator& o)
const
112 return ((mIteKey == o.mIteKey) && (mIteValue == o.mIteValue));
115 inline bool operator!=(
const iterator& o)
const
117 return ((mIteKey != o.mIteKey) || (mIteValue != o.mIteValue));
126 mIteKey = (++mIteKey);
127 mIteValue = (++mIteValue);
139 mIteKey = (++mIteKey);
140 mIteValue = (++mIteValue);
146 mIteKey = (--mIteKey);
147 mIteValue = (--mIteValue);
151 inline iterator operator--(
int)
155 mIteKey = (--mIteKey);
156 mIteValue = (--mIteValue);
160 inline iterator operator+(
int j)
const
176 inline iterator operator-(
int j)
const
178 return (
operator+(-j));
181 inline iterator& operator+=(
int j)
183 return (*
this = *
this + j);
186 inline iterator& operator-=(
int j)
188 return (*
this = *
this - j);
191 inline bool operator==(
const const_iterator& o)
const
193 return ((mIteKey == o.mIteKey) && (mIteValue == o.mIteValue));
196 inline bool operator!=(
const const_iterator& o)
const
198 return ((mIteKey != o.mIteKey) || (mIteValue != o.mIteValue));
201 friend class iterator;
206 typename CONTAINTER_KEY::const_iterator mIteKey;
207 typename CONTAINTER_VALUE::const_iterator mIteValue;
210 typedef std::bidirectional_iterator_tag iterator_category;
211 typedef qptrdiff difference_type;
212 typedef VALUE value_type;
213 typedef const VALUE* pointer;
214 typedef const VALUE& reference;
220 inline const_iterator(
typename CONTAINTER_KEY::const_iterator ki,
typename CONTAINTER_VALUE::const_iterator vi)
221 : mIteKey(ki), mIteValue(vi)
228 mIteValue = o.mIteValue;
231 inline const KEY& key()
const
236 inline const VALUE& value()
const
241 inline const VALUE& operator*()
const
246 inline const VALUE* operator->()
const
248 return (&(*mIteValue));
253 return ((mIteKey == o.mIteKey) && (mIteValue == o.mIteValue));
258 return ((mIteKey != o.mIteKey) || (mIteValue != o.mIteValue));
267 mIteKey = (++mIteKey);
268 mIteValue = (++mIteValue);
280 mIteKey = (++mIteKey);
281 mIteValue = (++mIteValue);
287 mIteKey = (--mIteKey);
288 mIteValue = (--mIteValue);
292 inline const_iterator operator--(
int)
294 const_iterator r = *
this;
296 mIteKey = (--mIteKey);
297 mIteValue = (--mIteValue);
301 inline const_iterator operator+(
int j)
const
303 const_iterator r = *
this;
317 inline const_iterator operator-(
int j)
const
319 return (
operator+(-j));
322 inline const_iterator& operator+=(
int j)
324 return (*
this = *
this + j);
327 inline const_iterator& operator-=(
int j)
329 return (*
this = *
this - j);
334 inline iterator begin()
336 return (iterator(mKeys.begin(), mValues.begin()));
338 inline const_iterator begin()
const
340 return (const_iterator(mKeys.begin(), mValues.begin()));
342 inline const_iterator constBegin()
const
344 return (const_iterator(mKeys.begin(), mValues.begin()));
346 inline const_iterator cbegin()
const
348 return (const_iterator(mKeys.begin(), mValues.begin()));
350 inline iterator end()
352 return (iterator(mKeys.end(), mValues.end()));
354 inline const_iterator end()
const
356 return (const_iterator(mKeys.end(), mValues.end()));
358 inline const_iterator constEnd()
const
360 return (const_iterator(mKeys.end(), mValues.end()));
362 inline const_iterator cend()
const
364 return (const_iterator(mKeys.end(), mValues.end()));
367 iterator erase(iterator it);
369 iterator find(
const KEY& key);
370 const_iterator find(
const KEY& key)
const;
372 inline VALUE& orderValue(
int order)
374 return (mValues[ order ]);
376 inline const VALUE& orderValue(
int order)
const
378 return (mValues[ order ]);
380 inline KEY& orderKey(
int order)
382 return (mKeys[ order ]);
384 inline const KEY& orderKey(
int order)
const
386 return (mKeys[ order ]);
389 const std::pair< KEY, VALUE > orderPair(
int order)
const
391 return (std::make_pair< KEY, VALUE >(orderKey(order), orderValue(order)));
394 const VALUE value(
const KEY& key,
const VALUE& defaultValue = VALUE())
const;
397 QMap< KEY, VALUE > toMap()
const;
400 CONTAINTER_KEY mKeys;
401 CONTAINTER_VALUE mValues;
404template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
409template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
414template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
421template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
424 return (mKeys.contains(key));
427template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
430 return (mKeys.count(key));
433template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
439template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
442 return (mKeys.empty());
445template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
448 return (mValues.first());
451template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
454 return (mValues.first());
457template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
460 return (mKeys.firstKey());
463template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
466 return (mKeys.isEmpty());
469template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
472 return (mKeys.size());
475template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
478 int index = mKeys.indexOf(key);
482 mValues.append(VALUE());
483 return (mValues.last());
485 return (mValues[ index ]);
488template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
492 typename CONTAINTER_KEY::iterator ki = mKeys.erase(it.mIteKey);
493 typename CONTAINTER_VALUE::iterator vi = mValues.erase(it.mIteValue);
494 return (iterator(ki, vi));
497template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
501 iterator i = begin();
502 const_iterator e = end();
505 if (i.key() == key) {
513template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
517 const_iterator i = begin();
518 const_iterator e = end();
521 if (i.key() == key) {
529template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
531 const VALUE& defaultValue)
const
533 const_iterator i = this->find(key);
535 return ((i == this->end()) ? defaultValue : i.value());
539template<
typename KEY,
typename VALUE,
typename CONTAINTER_KEY,
typename CONTAINTER_VALUE >
542 QMap< KEY, VALUE > r;
545 for (
int i = 0; i < s; ++i) {
546 r.insert(orderKey(i), orderValue(i));
Definition da_order_small_map.hpp:203
const_iterator & operator++()
++i
Definition da_order_small_map.hpp:265
const_iterator operator++(int)
i++
Definition da_order_small_map.hpp:276
迭代器
Definition da_order_small_map.hpp:69
iterator operator++(int)
i++
Definition da_order_small_map.hpp:135
iterator & operator++()
++i
Definition da_order_small_map.hpp:124
一种简化的map,通过两个连续容器来保存key和value,而不是用二叉树,对于少量的map数据有更好的性能
Definition da_order_small_map.hpp:22
da_order_small_map< KEY, VALUE, CONTAINTER_KEY, CONTAINTER_VALUE > _Myt
学stl
Definition da_order_small_map.hpp:28