Набори — це тип асоціативного контейнера, у якому кожен елемент має бути унікальним, оскільки значення елемента ідентифікує його. Значення зберігаються в певному порядку, тобто за зростанням або спаданням.
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)
Примітка: Ми можемо використовувати будь-який компаратор замість більшого, щоб надати набору власний порядок сортування.
Властивості
- Порядок зберігання – Набір зберігає елементи в відсортований порядок.
- Цінності Характеристики – Усі елементи в наборі мають унікальні цінності .
- Цінності Природа – Значення елемента не можна змінити після його додавання до набору, хоча можна видалити, а потім додати змінене значення цього елемента. Отже, цінності є незмінний .
- Техніка пошуку – Набори слідують Двійкове дерево пошуку впровадження.
- Організація замовлення – Значення в наборі є неіндексований .
Примітка: Щоб зберегти елементи в несортованому (випадковому) порядку, 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; |
Для отримання додаткової інформації ви можете звернутися до статті – Набори проти невпорядкованого набору .