Справочник по C/C++
multiset

Класс multiset поддерживает множество, в котором неуникальным(в общем случае) ключам соответствуют определенные значения. Спецификация его шаблона имеет следующий вид.

template <class Key, class Comp = less<Key>,
class Allocator = allocator<Key>> class multiset

Здесь Key - тип данных ключей, а Comp - функция, которая сравнивает два ключа. Класс multiset имеет следующие конструкторы.

explicit multiset(const Comp &cmpfn - Comp(), const Allocator &a = Allocator());
multiset(const multiset<Key, Comp, Allocator> &ob);
template <class InIter> multiset(InIter start, InIter end,
const Comp &cmpfn = Comp() , const Allocator &a = Allocator());

Первая форма конструктора создает пустое мультимножество, Вторая создает мультимножество, которое содержит те же элементы, что и мультимножество ob. Третья создает мультимножество, которое содержит элементы в диапазоне, заданном параметрами start и end. Функция, заданная параметром cmpfn(если она задана), определяет упорядочение мультимножества.

Для класса multiset определены следующие операторы сравнения: ==, <, <=, !=, > и >=.

Класс multiset содержит перечисленные ниже функции-члены. В приведенных в следующей таблице описаниях элементы key_type и value_type получены в результате применения оператора typedef для типа данных Key.

Функция-член Назначение
iterator begin();
const_iterator begin() const;
Возвращает итератор для первого элемента в мультимножестве
void clear(); Удаляет все элементы из мультимножества
size_type count(const key_type &k) const; Возвращает число вхождений значения k в мультимножестве
bool empty() const; Возвращает true, если мультимножество пустое, и false в противном случае
iterator end();
const_iterator end() const;
Возвращает итератор для конца мультимножества
pair<iterator, iterator> equal_range(const key_type &k) const; Возвращает пару итераторов, которые указывают на первый и последний элементы в мультимножестве,  которые содержат заданный ключ
void erase(iterator i); Удаляет элемент, на который указывает итератор i
void erase(iterator start, iterator end); Удаляет элементы в диапазоне, заданном параметрами start и end
size_type erase(const key_type &k); Удаляет из мультимножества элементы, ключи которых имеют значение k
iterator find(const key_type &k); Возвращает итератор для заданного ключа. Если ключ не обнаружен, возвращает итератор для конца мультимножества
allocator_type get_allocator() const; Возвращает распределитель мультимножества
iterator insert(iterator i, const value_type &val); Вставляет значение val в позиции или после элемента, заданного итератором i. Возвращает итератор для этого элемента
template <class InIter> void insert(InIter start, InIter end); Вставляет элементы заданного диапазона
iterator insert(const value_type &val); Вставляет значение val в используемое мультимножество. Возвращает итератор для вставленного элемента
key_compare key_comp() const; Возвращает объект-функцию, которая сравнивает ключи
iterator lower_bound(const key_type &k) const; Возвращает итератор для первого элемента в мультимножестве, ключ которого равен значению k или больше этого значения
size_type max_size() const; Возвращает максимальное число элементов, которое может содержать данное мультимножество
reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
Возвращает реверсивный итератор для конца мультимножества
reverse_iterator rend();
const_reverse_iterator rend() const;
Возвращает реверсивный итератор для начала мультимножества
size_type size() const; Возвращает текущее число элементов в мультимножестве
void swap(multiset<Key, T, Comp, Allocator> &ob); Выполняет обмен элементами данного мультимножества и мультимножества ob
iterator upper_bound(const key_type &k) const; Возвращает итератор для первого элемента в мультимножестве, ключ которого больше заданного значения k
value_compare value_comp() const; Возвращает объект-функцию, которая сравнивает значения