Операция | Назначение |
set s | Создает пустое множество или мультимножество, не содержащее ни одного элемента |
set s(op) | Создает пустое множество или мультимножество, ис-пользующее критерий сор-тировки ор |
set s=s1, set s(s1) | Копирующий конструктор; создает копию другого множества/мультимножества того же типа (все элементы копируются) |
set s(beg,end) | Создаёт множество s из элементов интервала [begin,end)любого контейнера, в том числе из эл-тов простого массива |
set s(beg,end,op) | Создает множество или мультимножество с критерием сортировки ор, инициализированное элементами интервала [beg,end) любого контейнера |
set s(initlist), set s=initlist | Создает множество/мульти-множество, инициализиро-ванное элементами списка инициализации initlist (стандарт С++ 11) |
s.~set() | Уничтожает все элементы и освобождает память |
В таблице символами «set» обозначена одна из следующих конструкций:
- set<Elem> — множество с сортировкой по критерию less<> (оператор <);
- set<Elem,op> — множество с сортировкой по критерию ор;
- multiset<Elem> — мультимножество с сортировкой по критерию less<> (оператор <);
- multiset<Elem,op> — мультимножество с сортировкой по критерию ор.
Таблица 27.2
Немодифицирующие операции
Операция | Назначение |
s.size() | Возвращает количество элементов в множестве s |
s.empty() | Возвращает true, если множество s пустое (эквивалент size()==0, но иногда выполняется быстрее) |
s.max_size() | Возвращает максимально возможный размер множества s |
s1 == s2 | Проверяет равенство двух множеств |
sl! = s2 | Проверяет неравенство двух множеств |
sl < s2 | Проверяет, что s1 < s2 (поэлементно) |
sl > s2 | Проверяет, что s1 > s2 |
sl <= s2 | Проверяет, что s1 <= s2 |
sl >= s2 | Проверяет, что s1 >= s2 |
Таблица 27.3
Специальные операции поиска
Операция | Назначение |
s.count(elem) | Возвращает количество элементов со значением elem |
s.find(elem) | Возвращает позицию первого элемента со значением elem (или end()) |
s.lower_bound(elem) | Возвращает первую позицию, в которую может быть вставлен элемент elem(первый элемент >= elem) или end(), если такого элемента нет |
s.upper_bound(elem) | Возвращает последнюю пози-цию, в которой может быть вставлен элемент elem (первый элемент > elem) или end(), если такого элемента нет |
s. equal_range(elem) | Возвращает первую и пос-леднюю позиции, в которых может быть вставлен элемент elem (интервал, в котором элементы == elem) если элемента в множестве нет, обе позиции будут равны |
Следующий пример демонстрирует применение функций lower_bound(), upper_ bound() и equal_range().
//Листинг 27.1
#include<iostream>
#include <set>
using namespace std;
int main () {
set<int> c;
c.insert(1);
c.insert(2);
c.insert(4);
c.insert(5);
c.insert(6);
cout<<"lower_bound(3): "
<< *c.lower_bound(3) << endl;
cout << "upper_bound(3): "
<< *c.upper_bound(3) << endl;
cout << "equal_range(3): "
<< *c.equal_range(3).first<< " "
<< *c.equal_range(3).second << endl;
cout << endl;
cout <<"lower_bound(5): "
<<*c.lower_bound(5)<<endl;
cout<< "upper_bound(5): "
<< *c.upper_bound(5)<< endl;
cout<<"equal_range(5): "
<<*c.equal_range(5).first << " "
<<*c.equal_range(5).second << endl;
return 0;
}
Результат выполнения программы:
lower_bound(3): 4
upper_bound(3): 4
equal_range(3): 4 4
lower_bound(5): 5
upper_bound(5): 6
equal_range(5): 5 6
Если вместо множества использовать мультимножество, результат останется прежним.
Таблица 27.4