Работа методов 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
map::reverse_iterator(map.begin()) == map.rend() map::rverse_iterator(map.end()) == map.rbegin()
Получить обратный итератор из прямого:
--map::reverse_iterator(map::iterator)