10. STL. SET/MULTISET Ассоциативные контейнеры

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *