22#ifndef COMMON_MULTIMAP_H
23#define COMMON_MULTIMAP_H
25#include "common/util.h"
26#include "common/rb_tree.h"
33template<
class Key,
class Val,
class CompFunc = Common::Less<Key> >
53 return _items.
begin();
67 return _items.
begin();
73 const_iterator
end()
const {
89 iterator upper_bound(
const Key &key) {
96 iterator
find(
const Key &theKey) {
98 if (it != this->
end() && compareEqual(it->first, theKey))
103 const_iterator
find(
const Key &theKey)
const {
104 const_iterator it = _items.
lowerBound(theKey);
105 if (it != this->
end() && compareEqual(it->first, theKey))
114 return _items.
erase(it);
117 iterator
erase(iterator first, iterator last) {
118 return _items.
erase(first, last);
121 iterator
erase(
const Key &theKey) {
122 const iterator first =
find(theKey);
123 iterator last = first;
124 while (last != this->
end() && compareEqual(last->first, theKey))
126 return _items.
erase(first, last);
129 iterator insert(
const value_type &val) {
130 return _items.
insert(val);
137 return _items.
size();
149 for (iterator it = this->
begin(); it != this->
end(); ++it) {
150 if (compareEqual(it->first, theKey))
157 bool compareEqual(
const Key &a,
const Key &b) {
158 return !_comp(a, b) && !_comp(b, a);
Definition: multimap.h:34
const_iterator end() const
Definition: multimap.h:73
iterator end()
Definition: multimap.h:59
size_t size() const
Definition: multimap.h:136
const_iterator lower_bound(const Key &key) const
Definition: multimap.h:81
iterator erase(iterator it)
Definition: multimap.h:113
iterator find(const Key &theKey)
Definition: multimap.h:96
void clear()
Definition: multimap.h:45
size_t count(const Key &theKey)
Definition: multimap.h:147
const_iterator begin() const
Definition: multimap.h:66
iterator begin()
Definition: multimap.h:52
Iterator< ValueType &, ValueType * > BasicIterator
Definition: rb_tree.h:122
void clear()
Definition: rb_tree.h:158
BasicIterator upperBound(const Key &key)
Definition: rb_tree.h:217
BasicIterator erase(BasicIterator it)
Definition: rb_tree.h:250
BasicIterator lowerBound(const Key &key)
Definition: rb_tree.h:181
BasicIterator end()
Definition: rb_tree.h:172
bool isEmpty() const
Definition: rb_tree.h:336
BasicIterator begin()
Definition: rb_tree.h:166
BasicIterator insert(const ValueType &val)
Definition: rb_tree.h:302
size_t size() const
Definition: rb_tree.h:327
Iterator< const ValueType &, const ValueType * > ConstIterator
Definition: rb_tree.h:123
Definition: algorithm.h:29