http://kytok.org.ua/post/std-set-u-cplusplus
#include <iostream>
#include <set>
using
namespace
std;
int
main()
{
// declaration of set container
set<
int
> myset{ 1, 2, 3, 4, 5 };
// using begin() to print set
for
(
auto
it = myset.begin(); it !=
myset.end(); ++it)
cout <<
' '
<< *it;
return
0;
}
2661
#include <iostream>
#include <set>
using namespace std;
set<int> s;
int main ()
{
int n,i,k,t;
cin>>n;
for (i=0;i<n;i++)
{
cin>>k;
s.insert(k);
}
cin>>n;
for (i=0;i<n;i++)
{
cin>>k;
s.insert(k);
}
for(auto it = s.begin(); it != s.end(); it++)
cout<<*it<<" ";
return 0;
}
2927
#include <iostream>
#include <set>
using namespace std;
set<int> s;
int main ()
{
int n,i,k,j,x;
cin>>n;
for (i=0;i<n;i++)
{
cin>>k;
for (j=0;j<k;j++)
{
cin>>x;
s.insert(x);
}
}
cout<<s.size();
return 0;
}
5337
#include <iostream>
#include <set>
using namespace std;
set<int> s;
int main ()
{
int r,i,t;
cin>>r;
for (i=0;i<r;i++)
{
cin>>t;
s.insert(t);
}
cout<<s.size();
return 0;
}
5089
#include <iostream>
#include <set>
using namespace std;
int main ()
{
set<string> s;
int i,n; string str;
cin >> n;
for (i = 0; i < n; i++)
{
cin >> str;
s.insert(str);
}
for (string str : s)
cout << str << endl;
return 0;
}
В языке C++ контейнер set позволяет работать с различными множествами. Под множеством в данном случае понимают некоторое количество отсортированных элементов. Использование в файле set требует подключения
1 #include <set>
В данном контейнере сортировка происходит автоматически, при добавлении элемента. Причем повторяющиеся элементы могут быть, как удалены, в случае работы с множеством, так и записаны, в случае с мультимножеством, позволяющим это. Рассмотрим конкретный пример
123456789 set<int> S;multiset<int> mS; mS.insert(1);mS.insert(2);mS.insert(2);S.insert(1);S.insert(2);S.insert(2);
После добавлений мы получим 2 множества S = (1, 2) и mS = (1, 2, 2). Вместо insert можно использовать функцию emplace, которая перед добавлением проверяет, есть ли уже такой элемент, и если нет, то добавляет его.
Set является контейнером, так что имеет все стандартные для контейнера функции:
- Работа с элементами set:
- S.swap(S2) - меняет содержимое контейнеров местами,
- S.insert(a) - вставка элемента a,
- S.erase(S2) - удаляет последовательность элементов,
- S.clear() - очистка контейнера set,
- S.count() - количество элементов в контейнере,
- S.find(a) - найти элемент a в контейнере,
- S.lower_bound(a) - первый элемент, не меньший чем a,
- S.upper_bound(a) - первый элемент, больший чем a,
- S.equal_range(a) - пара элементов, первый - нижняя граница элементов с, такими же значениями, что и a, второй - верхняя граница элементов с такими же значениями, что и a.
- Работа с памятью:
- S.size() - размер контейнера,
- S.max_size() - максимальный размер контейнера.
- Работа с контейнером:
- S.begin() - указатель на начало контейнера,
- S.end() - указатель на конец контейнера,
- S.rbegin() - реверсивный указатель на конец контейнера,
- S.rend() - реверсивный указатель на начало контейнера.
1234567891011121314151617181920212223242526272829303132 #include <set> // подключаем set#include <string> // подключаем строки string#include <iostream> // подключаем cout using namespace std; // чтобы не писать std:: int main(){ set <string> S; // инициализация set S.insert("January"); S.insert("February"); S.insert("March"); S.insert("April"); cout<<S.size()<<'\n'; // будет выведено 4 cout<<S.max_size()<<'\n'; cout<<*(S.begin())<<'\n'; // April cout<<*(S.rbegin())<<'\n'; // March cout<<S.count("January")<<'\n'; // 1 cout<<*S.lower_bound("January")<<'\n'; // January cout<<*S.upper_bound("January")<<'\n'; // March cout<<*(S.equal_range("January")).first<<'\n'; // January cout<<*(S.equal_range("January")).second<<'\n'; // March cout<<*S.find("January")<<'\n'; // January S.erase("January"); cout<<S.count("January")<<'\n'; // 0 S.clear(); cout<<S.size()<<'\n'; // 0 cin.get(); // ожидаем нажатие пользователем клавиши return 0; // выдаём 0 - правило хорошего тона}