9 #ifndef anna_core_util_MultiMap_hpp 10 #define anna_core_util_MultiMap_hpp 33 template <
typename T,
typename SortBy,
typename TKey =
int >
class MultiMap :
public std::vector <T*> {
34 struct LessT :
public std::binary_function <T*, T*, bool> {
35 bool operator()(
const T* first,
const T* second)
const {
36 return SortBy::value(first) < SortBy::value(second);
41 struct LessKey :
public std::binary_function <T*, TKey, bool> {
42 bool operator()(
const T* _vv,
const TKey& searched)
const {
43 return SortBy::value(_vv) < searched;
79 iterator maxii = this->end();
80 iterator ii = std::upper_bound(this->begin(), maxii, _vv, a_lessT);
85 this->insert(ii, _vv);
97 bool contains(
const T* _vv)
const {
return (_vv == NULL) ? false : (
find(SortBy::value(_vv)) != NULL); }
103 for(iterator ii = this->begin(), maxii = this->end(); ii != maxii; ii ++)
119 iterator maxii = this->end();
120 iterator ii = std::lower_bound(this->begin(), this->end(), _vv, a_lessT);
127 if(!(SortBy::value(_vv) == SortBy::value(dd)))
130 container::erase(ii);
149 iterator maxii = this->end();
150 iterator ii = lower_bound(this->begin(), maxii, key, a_lessKey);
156 return (SortBy::value(pos) == key) ? pos : NULL;
165 return lower_bound(this->begin(), this->end(), key, a_lessKey);
173 const T*
find(
const TKey& key)
const {
181 static T*
data(iterator ii) {
return *ii; }
187 static const T*
data(const_iterator ii) {
return *ii; }
iterator erase_iterator(iterator ii)
Definition: MultiMap.hpp:140
static const T * data(const_iterator ii)
Definition: MultiMap.hpp:187
T * find(const TKey &key)
Definition: MultiMap.hpp:147
static T * data(iterator ii)
Definition: MultiMap.hpp:181
virtual ~MultiMap()
Definition: MultiMap.hpp:67
container::const_iterator const_iterator
Definition: MultiMap.hpp:50
bool add(T *_vv) noexcept(false)
Definition: MultiMap.hpp:74
Definition: MultiMap.hpp:33
bool contains(const T *_vv) const
Definition: MultiMap.hpp:97
MultiMap()
Definition: MultiMap.hpp:56
container::value_type value_type
Definition: MultiMap.hpp:51
MultiMap(const MultiMap &other)
Definition: MultiMap.hpp:62
T * erase(const T *_vv) noexcept(false)
Definition: MultiMap.hpp:114
void clearAndDestroy()
Definition: MultiMap.hpp:102
const T * find(const TKey &key) const
Definition: MultiMap.hpp:173
container::iterator iterator
Definition: MultiMap.hpp:49
iterator find_iterator(const TKey &key)
Definition: MultiMap.hpp:163
std::vector< T * > container
Definition: MultiMap.hpp:48