94 lines
4.6 KiB
Markdown
94 lines
4.6 KiB
Markdown
---
|
||
title: Set
|
||
localeTitle: Задавать
|
||
---
|
||
Сложная структура данных в c ++ определяется так же, как набор определяется в контексте математики.
|
||
|
||
Более формально говоря, наборы - это тип ассоциативных контейнеров, в которых каждый элемент должен быть уникальным.
|
||
|
||
* Значение элемента не может быть изменено после его ввода, хотя удаление элемента и вставка нового элемента разрешены так же, как мы делаем в математике.
|
||
* Установка структуры данных может быть использована для моделирования, ну, сама устанавливает. Легко найти пересечения, союзы и т. Д.
|
||
* Подобно вектору, но допускаются только уникальные значения.
|
||
* Устанавливает элементы в порядке возрастания, когда вы вставляете элементы в набор.
|
||
|
||
Файл заголовка, необходимый для использования установленной структуры данных, «установлен». т.е. `#include<set>` должен быть в вашем коде, чтобы вы могли использовать установленную структуру данных.
|
||
|
||
**Pro tip** : - Используйте `#include<bits/stdc++.h>` чтобы включить все структуры и функции данных C ++ вместо их добавления по одному.
|
||
Некоторые из функций, которые могут выполняться с набором: -
|
||
|
||
1. begin () - возвращает итератор в первый элемент в наборе
|
||
2. end () - возвращает итератор к теоретическому элементу, который следует за последним элементом в наборе
|
||
3. size () - возвращает количество элементов в наборе
|
||
4. max\_size () - возвращает максимальное количество элементов, которые может содержать набор
|
||
5. empty () - Возвращает, является ли набор пустым
|
||
6. erase (const g) - удаляет значение 'g' из набора
|
||
7. clear () - Удаляет все элементы из набора
|
||
|
||
Давайте посмотрим на пример:
|
||
|
||
```cpp
|
||
#include <iostream>
|
||
#include <set>
|
||
#include <iterator>
|
||
|
||
using namespace std;
|
||
int main()
|
||
{
|
||
set <int> myset; //an empty set container. Note that size of the set need not be declared, similar to vector.
|
||
|
||
// insert elements in random order
|
||
myset.insert(65);
|
||
myset.insert(30);
|
||
myset.insert(80);
|
||
myset.insert(20);
|
||
myset.insert(9);
|
||
myset.insert(9); // only one 9 will be added to the list.
|
||
|
||
|
||
// printing set myset
|
||
set <int> :: iterator itr; //an iterator is like a pointer.
|
||
cout << "\nThe contents of myset : ";
|
||
for (itr = myset.begin(); itr != myset.end(); ++itr)
|
||
{
|
||
cout << '\t' << *itr;
|
||
}
|
||
cout << endl;
|
||
|
||
|
||
// remove all elements up to 65 in myset from the beginning:-
|
||
cout << "\nContents of myset after removal of elements less than 30 : ";
|
||
myset.erase(myset.begin(), myset.find(30));
|
||
for (itr = myset.begin(); itr != myset.end(); ++itr)
|
||
{
|
||
cout << '\t' << *itr;
|
||
}
|
||
|
||
// remove element with value 50 in myset
|
||
|
||
int num = myset.erase(80); //returns true (and deletes) if 80 is there in the list else returns 0.
|
||
cout<<"\n\n After doing myset.erase(80), "<<num<<" element is removed\n\n";
|
||
cout<<"Contents of the modified set:\t";
|
||
for (itr = myset.begin(); itr != myset.end(); ++itr)
|
||
{
|
||
cout << '\t' << *itr;
|
||
}
|
||
|
||
cout << endl;
|
||
|
||
|
||
return 0;
|
||
|
||
}
|
||
```
|
||
|
||
\`\` \`Каст Выход:- Содержимое myset: 9 20 30 65 80
|
||
|
||
Содержание myset после удаления элементов менее 30: 30 65 80
|
||
|
||
После выполнения myset.erase (80) удаляется 1 элемент
|
||
|
||
Содержание модифицированного набора: 30 65 \`\` \`
|
||
|
||
\### Источники
|
||
|
||
1. [Вундеркинды для вундеркиндов](https://www.geeksforgeeks.org/set-in-cpp-stl/) |