STL. SET/MULTISET Ассоциативные контейнеры
SET реализует алгоритмы бинарного дерева.
Для работы необходимо подключить библиотеку
#include <set>
Set входит в пространство имен std, поэтому или пишем std:: или используем пространство имен using namespace std;
При добавлении элемента в контейнер set происходит его «сортировка» согласно алгоритму бинарного дерева, а дублирующиеся элементы уничтожаются, также из-за самой особенности бинарного дерева мы НЕ можем изменить элемент.
Чтобы изменить ограничение – достаточно найти и удалить элемент в коллекции и потом добавить новый элемент, который встанет на нужное место.
set mySet;
//set mySet={10,-15,9,125,88};
mySet.insert(10); //добавить элемент, в результате возвращаются итератор и bool, если элемент уже есть, то bool=false
mySet.insert(9);
mySet.insert(15);
for(auto &var : mySet) //выведутся элементы по возрастанию
{
cout<<var<<endl;
}
auto iter= mySet.find(9); //ищем элемент, равный 10, получаем его итератор, если такого числа нет, то auto iter=mySet.end();
auto result=mySet.erase(15); //удалить число 15 из коллекции, если такого элемента нет, то возвращается 0
MULTISET реализует алгоритмы бинарного дерева.
Для работы с вектором необходимо подключить библиотеку
#include <set> //они в одной библиотеке с set
Multiset входит в пространство имен std, поэтому или пишем std:: или используем пространство имен using namespace std;
В отличие от set дублирующиеся элементы НЕ уничтожаются.
multiset<int> myMSet;
Функции и смысл примерно такой же как у set.
Из-за возможности дублирования данных у multiset есть пара дополнительных функций
multiset myMSet={0,1,1,22,3,4,1};
auto iter1=myMSet.lower_bound(1);//вернет итератор на первую найденную единицу
auto iter2=myMSet.upper_bound(1);//вернет итератор на элемент за последней единицей (помним что числа по возрастанию) т.е.3
auto iters34=myMSet.equal_range(3);//возвращает итераторы на диапазон чисел от lower_bound до upper_bound