14 using base_type = std::map<Key, T>;
16 using mapped_type = T;
17 using value_type =
typename base_type::value_type;
18 using size_type =
typename base_type::size_type;
19 using iterator =
typename base_type::iterator;
20 using const_iterator =
typename base_type::const_iterator;
21 using reverse_iterator =
typename base_type::reverse_iterator;
22 using const_reverse_iterator =
typename base_type::const_reverse_iterator;
27 const_iterator lower_bound_impl(key_type key)
const {
29 const_iterator it = base.lower_bound(key);
32 return base.empty() ? base.
end() : std::prev(it);
33 else if(it->first == key)
35 else if(it == base.
begin())
42 void clear() { base.clear(); }
44 iterator begin() {
return base.
begin(); }
46 const_iterator begin()
const {
return base.
begin(); }
48 iterator end() {
return base.
end(); }
50 const_iterator end()
const {
return base.
end(); }
52 reverse_iterator rbegin() {
return base.rbegin(); }
54 const_reverse_iterator rbegin()
const {
return base.rbegin(); }
56 reverse_iterator rend() {
return base.rend(); }
58 const_reverse_iterator rend()
const {
return base.rend(); }
60 const_iterator cbegin()
const {
return base.cbegin(); }
62 const_iterator cend()
const {
return base.cend(); }
64 const_reverse_iterator crbegin()
const {
return base.crbegin(); }
66 const_reverse_iterator crend()
const {
return base.crend(); }
68 size_type size()
const {
78 std::pair<iterator, bool> insert(key_type key,
const mapped_type& value) {
80 return base.insert({ key, value });
83 size_type erase(key_type frame) {
85 return base.erase(frame);
88 iterator erase(iterator it) {
90 return base.erase(it);
93 iterator find(key_type key) {
95 return base.find(key);
101 const_iterator it = lower_bound_impl(key);
102 return it == base.
end() ? base.
end() : base.find(it->first);
108 return lower_bound_impl(key);
114 return base.upper_bound(key);
120 return base.upper_bound(key);
126 std::pair<iterator, iterator>
bounds(key_type key) {
134 std::pair<const_iterator, const_iterator>
bounds(key_type key)
const {