35template<
class key_t,
class val_t>
36class SimpleMap: std::vector<std::pair<key_t, val_t> > {
37 typedef std::pair<key_t, val_t> key_val_t;
38 typedef std::vector<key_val_t> key_val_vec_t;
39 typedef typename key_val_vec_t::iterator iterator;
40 typedef typename key_val_vec_t::const_iterator const_iterator;
43 binsearch (iterator first, iterator last,
const key_t& key)
45 first = std::lower_bound(first, last, key,
46 [](
const key_val_t &x,
const key_t &y) {
47 return x.first < y;});
48 if (first==last || key < first->first) {
55 binsearch (const_iterator first, const_iterator last,
const key_t& key)
const
57 first = std::lower_bound(first,last,key,
58 [](
const key_val_t &x,
const key_t &y) {
59 return x.first < y;});
60 if (first==last || key < first->first) {
70 find(
const key_t &key)
const {
71 auto it= binsearch(key_val_vec_t::begin(), key_val_vec_t::end(), key);
72 assert(it == key_val_vec_t::end() || it->first == key);
78 auto it=binsearch(key_val_vec_t::begin(), key_val_vec_t::end(), key);
79 assert(it == key_val_vec_t::end() || it->first == key);
85 return find(key) != key_val_vec_t::end();
90 return key_val_vec_t::end();
102 assert(
size()==0||key > key_val_vec_t::operator[](
size()-1).first);
103 key_val_vec_t::push_back(key_val_t(key,val));
116 key_val_vec_t vec(key_val_vec_t::size()-1);
117 iterator target=copy(key_val_vec_t::begin(),it,vec.begin());
118 copy(it+1,key_val_vec_t::end(),target);
125 return key_val_vec_t::size();
130 return key_val_vec_t::capacity();
135 key_val_vec_t vec(
size());
136 copy(key_val_vec_t::begin(),key_val_vec_t::end(),vec.begin());
Space saving replacement for map.
Definition simple_map.hpp:36
auto end() const
Definition simple_map.hpp:89
SimpleMap()
Definition simple_map.hpp:67
bool exists(const key_t &key) const
Definition simple_map.hpp:84
size_t capacity() const
Definition simple_map.hpp:129
size_t size() const
Definition simple_map.hpp:124
iterator find(const key_t &key)
Definition simple_map.hpp:77
const_iterator find(const key_t &key) const
Definition simple_map.hpp:70
void push_ascending(const key_t &key, const val_t &val)
push in ascending order of keys
Definition simple_map.hpp:101
void reallocate()
Definition simple_map.hpp:134
void erase(iterator it)
Definition simple_map.hpp:107
Definition assignment.hpp:29