Advertisement
Malinovsky239

Set

Jan 18th, 2012
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.52 KB | None | 0 0
  1. #include <cstdio>
  2. #include <set> // подключение set'а
  3.  
  4. using namespace std; // т.к. библиотека set из STL (стандартной библиотеки шаблонов), то эта строчка необходима, в её смысл пока можно не вникать :)
  5.  
  6. set<int> heap; // объявляем set из int'ов. Вместо int любой другой тип, в том числе, пользовательский. Аналогично объявлению vector'а.
  7.  
  8. int main() {
  9.     // теперь пусть у нас есть на входе n элементов, и мы хотим их закинуть в set
  10.     int n;
  11.     scanf("%d", &n);       
  12.  
  13.     for (int i = 0; i < n; i++) {
  14.         int a;
  15.         scanf("%d", &a);
  16.         heap.insert(a); // добавить значение a в set
  17.     }
  18.  
  19.     // set не heap, а красно-чёрное дерево, а потому умеет делать несколько больше, чем обычная куча. Например, он может возвращать как максимум, так и минимум.
  20.     int mx = *heap.begin(); // значение минимального элемента
  21.     int mn = *heap.rbegin(); // значение максимального элемента (две последние строчки мог перепутать местами, опытным путём легко проверить :)
  22.     printf("%d %d ", mx, mn);
  23.     heap.erase(239); // удалить элемент со значением 239
  24.     heap.erase(heap.begin()); // удалить минимальный элемент. Обрати внимание, аргумент функции - итератор (указатель), а не числовое значение, как в прошлой строчке. Так тоже можно
  25.     int exist = heap.count(251211); // 1, если элемент со значением 251211 есть в set'е, 0 - иначе.
  26.     int sz = heap.size(); // количество элементов в set'е
  27.  
  28.     // важное уточнение: set не хранит одинаковые элементы. Если тебе нужны одинаковые элементы во всех экземплярах, то нужно использовать multiset. Соответственно, название библиотеки меняется на <multiset>, и объявление - на multiset<int>. А метод count(a) теперь возвращает число элементов, равных a.
  29.  
  30.     return 0;
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement