logo

Установити в стандартній бібліотеці шаблонів C++ (STL)

Набори — це тип асоціативного контейнера, у якому кожен елемент має бути унікальним, оскільки значення елемента ідентифікує його. Значення зберігаються в певному порядку, тобто за зростанням або спаданням.

The std::set є частиною стандартної бібліотеки шаблонів C++ (STL) і визначено всередині файл заголовка.



Синтаксис:

список ініціалізації python
std::set set_name;>

Тип даних: Набір може приймати будь-який тип даних залежно від значень, напр. int, char, float тощо.

приклад:



set val; // defining an empty set set val = {6, 10, 5, 1}; // defining a set with values>

програма:

C++






// C++ Program to Demonstrate> // the basic working of STL> #include> #include> int> main()> {> >std::set<>char>>a;> >a.insert(>'G'>);> >a.insert(>'F'>);> >a.insert(>'G'>);> >for> (>auto>& str : a) {> >std::cout << str <<>' '>;> >}> >std::cout <<>' '>;> >return> 0;> }>

>

синтаксис git pull
>

Вихід

F G>

Часова складність: O(N) // N — розмір набору.

Допоміжний простір: O(N)

Причина, по якій він друкує лише F і G, полягає в тому, що набір не приймає кілька однакових значень, він приймає лише унікальне значення. Ми можемо використовувати Мультинабір якщо ми хочемо зберегти кілька однакових значень.

Набір відсортовано за спаданням

За замовчуванням std::set відсортовано в порядку зростання. Однак у нас є можливість змінити порядок сортування за допомогою наступного синтаксису.

std::set  set_name;>

приклад:

C++




// C++ program to demonstrate the creation of descending> // order set container> #include> #include> using> namespace> std;> int> main()> {> >set<>int>, greater<>int>>> s1;> >s1.insert(10);> >s1.insert(5);> >s1.insert(12);> >s1.insert(4);> >for> (>auto> i : s1) {> >cout << i <<>' '>;> >}> >return> 0;> }>

>

>

Вихід

12 10 5 4>

Часова складність: O(N) // N — розмір набору.

Допоміжний простір: O(N)

Примітка: Ми можемо використовувати будь-який компаратор замість більшого, щоб надати набору власний порядок сортування.

Властивості

  1. Порядок зберігання – Набір зберігає елементи в відсортований порядок.
  2. Цінності Характеристики – Усі елементи в наборі мають унікальні цінності .
  3. Цінності Природа – Значення елемента не можна змінити після його додавання до набору, хоча можна видалити, а потім додати змінене значення цього елемента. Отже, цінності є незмінний .
  4. Техніка пошуку – Набори слідують Двійкове дерево пошуку впровадження.
  5. Організація замовлення – Значення в наборі є неіндексований .

Примітка: Щоб зберегти елементи в несортованому (випадковому) порядку, unordered_set() може бути використаний.

рядок у char java

Деякі основні функції, пов’язані з Set

  • почати() – Повертає ітератор до першого елемента в наборі.
  • кінець() – Повертає ітератор до теоретичного елемента, який слідує за останнім елементом у наборі.
  • розмір() – Повертає кількість елементів у наборі.
  • max_size() – Повертає максимальну кількість елементів, яку може містити набір.
  • порожній() – Повертає, чи набір порожній.

Часова складність для виконання різних операцій над множинами:

  • Вставка елементів – O(log N)
  • Видалення елементів – O(log N)

CPP




// C++ program to demonstrate various functions of> // STL> #include> #include> #include> using> namespace> std;> int> main()> {> >// empty set container> >set<>int>, greater<>int>>> s1;> >// insert elements in random order> >s1.insert(40);> >s1.insert(30);> >s1.insert(60);> >s1.insert(20);> >s1.insert(50);> >// only one 50 will be added to the set> >s1.insert(50);> >s1.insert(10);> >// printing set s1> >set<>int>, greater<>int>>>::ітератор itr;> >cout <<>' The set s1 is : '>;> >for> (itr = s1.begin(); itr != s1.end(); itr++) {> >cout << *itr <<>' '>;> >}> >cout << endl;> >// assigning the elements from s1 to s2> >set<>int>>s2(s1.begin(), s1.end());> >// print all elements of the set s2> >cout <<>' The set s2 after assign from s1 is : '>;> >for> (itr = s2.begin(); itr != s2.end(); itr++) {> >cout << *itr <<>' '>;> >}> >cout << endl;> >// remove all elements up to 30 in s2> >cout <<>' s2 after removal of elements less than 30 '> >': '>;> >s2.erase(s2.begin(), s2.find(30));> >for> (itr = s2.begin(); itr != s2.end(); itr++) {> >cout << *itr <<>' '>;> >}> >// remove element with value 50 in s2> >int> num;> >num = s2.erase(50);> >cout <<>' s2.erase(50) : '>;> >cout << num <<>' removed '>;> >for> (itr = s2.begin(); itr != s2.end(); itr++) {> >cout << *itr <<>' '>;> >}> >cout << endl;> >// lower bound and upper bound for set s1> >cout <<>'s1.lower_bound(40) : '> ><< *s1.lower_bound(40) << endl;> >cout <<>'s1.upper_bound(40) : '> ><< *s1.upper_bound(40) << endl;> >// lower bound and upper bound for set s2> >cout <<>'s2.lower_bound(40) : '> ><< *s2.lower_bound(40) << endl;> >cout <<>'s2.upper_bound(40) : '> ><< *s2.upper_bound(40) << endl;> >return> 0;> }>

>

>

npm очистити кеш
Вихід

The set s1 is : 60 50 40 30 20 10 The set s2 after assign from s1 is : 10 20 30 40 50 60 s2 after removal of elements less than 30 : 30 40 50 60 s2.erase(50) : 1 removed 30 40 60 s1.lower_bound(40) : 40 s1.upper_bound(40) : 30 s2.lower_bound(40) : 40 s2.upper_bound(40) : 60>

Інша функція набору в C++ STL

функція опис
почати() Повертає ітератор до першого елемента в наборі.
кінець() Повертає ітератор до теоретичного елемента, який слідує за останнім елементом у наборі.
rbegin() Повертає зворотний ітератор, що вказує на останній елемент у контейнері.
render() Повертає зворотний ітератор, що вказує на теоретичний елемент безпосередньо перед першим елементом у контейнері набору.
crbegin() Повертає постійний ітератор, що вказує на останній елемент у контейнері.
crend() Повертає постійний ітератор, що вказує на позицію безпосередньо перед першим елементом у контейнері.
cbegin() Повертає постійний ітератор, що вказує на перший елемент у контейнері.
декілька() Повертає постійний ітератор, що вказує на позицію після останнього елемента в контейнері.
розмір() Повертає кількість елементів у наборі.
max_size() Повертає максимальну кількість елементів, яку може містити набір.
порожній() Повертає, чи набір порожній.
вставити (const g) Додає новий елемент «g» до набору.
вставка ітератора (позиція ітератора, const g) Додає новий елемент «g» у позиції, на яку вказує ітератор.
стерти (позиція ітератора) Видаляє елемент у позиції, на яку вказує ітератор.
стерти (const g) Вилучає значення «g» із набору.
очистити() Вилучає всі елементи з набору.
key_comp() / value_comp() Повертає об’єкт, який визначає порядок розташування елементів у наборі («<» за замовчуванням).
знайти (const g) Повертає ітератор до елемента «g» у наборі, якщо він знайдений, інакше повертає ітератор до кінця.
кількість (const g) Повертає 1 або 0 залежно від того, присутній елемент «g» у наборі чи ні.
нижня_межа (const g) Повертає ітератор до першого елемента, який еквівалентний «g» або точно не буде передувати елементу «g» у наборі.
верхня_межа (const g) Повертає ітератор до першого елемента, який буде йти після елемента «g» у наборі.
рівний_діапазон() Функція повертає ітератор пар. (key_comp). Пара відноситься до діапазону, який включає всі елементи в контейнері, які мають ключ, еквівалентний k.
поставити() Ця функція використовується для вставки нового елемента в контейнер набору, лише якщо елемент, який потрібно вставити, унікальний і ще не існує в наборі.
emplace_hint() Повертає ітератор, що вказує на позицію, де виконується вставка. Якщо елемент, переданий у параметрі, уже існує, він повертає ітератор, що вказує на позицію, де знаходиться існуючий елемент.
своп() Ця функція використовується для обміну вмістом двох наборів, але набори мають бути одного типу, хоча розміри можуть відрізнятися.
оператор= «=» — це оператор у C++ STL, який копіює (або переміщує) набір до іншого набору, а set::operator= — це відповідна операторна функція.
get_allocator() Повертає копію об’єкта розподілювача, пов’язаного з набором.

Різниця між набором і невпорядкованим набором

встановити

Невпорядкований набір

Набір зберігає елементи в упорядкованому порядку Unordered Set зберігає елементи в несортованому порядку
Набір магазинів/отримання тільки унікальних елементів Невпорядкований набір зберігає/отримує лише унікальні значення
Set використовує двійкові дерева пошуку для реалізації Unordered Set використовує хеш-таблиці для реалізації
Більш ніж один елемент можна стерти, вказавши початковий і кінцевий ітератори Ми можемо стерти той елемент, для якого вказана позиція ітератора
встановити Set_Name; unordered_set UnorderedSet_Name;

Для отримання додаткової інформації ви можете звернутися до статті – Набори проти невпорядкованого набору .