iterator lower_bound(const key_type& x);
const_iterator lower_bound(const key_type& x) const;
iterator upper_bound(const key_type& x);
const_iterator upper_bound(const key_type& x) const;
pair‹iterator, iterator› equal_range(const key_type& x);
pair‹const_iterator, const_iterator› equal_range(const key_type& x) const;
};
template ‹class Key, class T, class Compare, class Allocator›
bool operator==(const multimap‹Key, T, Compare, Allocator›& x, const multimap‹Key, T, Compare, Allocator›& y);
template ‹class Key, class T, class Compare, class Allocator›
bool operator‹(const multimap‹Key, T, Compare, Allocator›& x, const multimap‹Key, T, Compare, Allocator›& y);
iterator - двунаправленный итератор, указывающий на value_type. Точный тип зависит от реализации и определяется в Allocator.
const_iterator - постоянный двунаправленный итератор, указывающий на value_type. Точный тип зависит от реализации и определяется в Allocator. Гарантируется, что имеется конструктор для const_iterator из iterator.
size_type - целочисленный тип без знака. Точный тип зависит от реализации и определяется в Allocator.
difference_type - целочисленный тип со знаком. Точный тип зависит от реализации и определяется в Allocator.
ИТЕРАТОРЫ ПОТОКОВ
Чтобы шаблоны алгоритмов могли работать непосредственно с потоками ввода-вывода, предусмотрены соответствующие шаблонные классы, подобные итераторам. Например,
partial_sum_copy(istream_iterator‹double›(cin), istream_iterator‹double›, ostream_iterator‹double›(cout, "\n"));
читает файл, содержащий числа с плавающей запятой, из cin и печатает частичные суммы в cout.
Итератор входного потока (Istream Iterator)
istream_iterator‹T› читает (используя operator››) последовательные элементы из входного потока, для которого он был создан. После своего создания итератор каждый раз при использовании ++ читает и сохраняет значение T. Если достигнут конец потока (operator void* в потоке возвращает false), итератор становится равным значению
Невозможно записывать что-либо с использованием входных итераторов. Основная особенность входных итераторов - тот факт, что операторы ++ не сохраняют равенства, то есть i==j не гарантирует вообще, что ++i==++j. Каждый раз, когда ++ используется, читается новое значение. Практическое следствие этого факта - то, что входные итераторы могут использоваться только для однопроходных алгоритмов, что действительно имеет здравый смысл, так как многопроходным алгоритмам всегда более соответствует использование структур данных в оперативной памяти.
Два итератора
template ‹class T, class Distance = ptrdiff_t›
class istream_iterator: public input_iterator‹T, Distance› {
friend bool operator==(const istream_iterator‹T, Distance›& x, const istream_iterator‹T, Distance›& y);
public:
istream_iterator;
istream_iterator(istream& s);
istream_iterator(const istream_iterator‹T, Distance›& x);
~istream_iterator;
const T& operator* const;
istream_iterator‹T, Distance›& operator++;
istream_iterator‹T, Distance› operator++(int);
};
template ‹class T, class Distance›