Содержание

C++ STL

<map>

Работа методов lower_bound() и upper_bound() на примере.

  map<uint32_t, char> m;
  map<uint32_t, char>::iterator i;
  pair<map<uint32_t, char>::iterator, map<uint32_t, char>::iterator> p;
  uint32_t k;
  m[0]='a';
  m[5]='b';
  m[8]='c';
  m[20]='d';
  for (k=0; k<21; k++) {
    i=m.lower_bound(k);
    cout << "lower_bound(" << k << ")=" << i->first;
    i=m.upper_bound(k);
    cout << "  upper_bound(" << k << ")=" << i->first;
    p=m.equal_range(k);
    cout << "  equal_range(" << k << ")=" << p.first->first << ":" << p.second->first << endl;;
  }

Результат:

lower_bound(0)=0  upper_bound(0)=5  equal_range(0)=0:5
lower_bound(1)=5  upper_bound(1)=5  equal_range(1)=5:5
lower_bound(2)=5  upper_bound(2)=5  equal_range(2)=5:5
lower_bound(3)=5  upper_bound(3)=5  equal_range(3)=5:5
lower_bound(4)=5  upper_bound(4)=5  equal_range(4)=5:5
lower_bound(5)=5  upper_bound(5)=8  equal_range(5)=5:8
lower_bound(6)=8  upper_bound(6)=8  equal_range(6)=8:8
lower_bound(7)=8  upper_bound(7)=8  equal_range(7)=8:8
lower_bound(8)=8  upper_bound(8)=20  equal_range(8)=8:20
lower_bound(9)=20  upper_bound(9)=20  equal_range(9)=20:20
lower_bound(10)=20  upper_bound(10)=20  equal_range(10)=20:20
lower_bound(11)=20  upper_bound(11)=20  equal_range(11)=20:20
lower_bound(12)=20  upper_bound(12)=20  equal_range(12)=20:20
lower_bound(13)=20  upper_bound(13)=20  equal_range(13)=20:20
lower_bound(14)=20  upper_bound(14)=20  equal_range(14)=20:20
lower_bound(15)=20  upper_bound(15)=20  equal_range(15)=20:20
lower_bound(16)=20  upper_bound(16)=20  equal_range(16)=20:20
lower_bound(17)=20  upper_bound(17)=20  equal_range(17)=20:20
lower_bound(18)=20  upper_bound(18)=20  equal_range(18)=20:20
lower_bound(19)=20  upper_bound(19)=20  equal_range(19)=20:20
lower_bound(20)=20  upper_bound(20)=4  equal_range(20)=20:4

Итераторы

Соответствие прямого и обратного итераторов (reverse-iterator)

map::reverse_iterator(map.begin()) == map.rend()
map::rverse_iterator(map.end()) == map.rbegin()

Получить обратный итератор из прямого:

--map::reverse_iterator(map::iterator)