set

В языке C++ контейнер set позволяет работать с различными множествами. Под множеством в данном случае понимают некоторое количество отсортированных элементов. Использование  в файле set требует подключения

В данном контейнере сортировка происходит автоматически, при добавлении элемента. Причем повторяющиеся элементы могут быть, как удалены, в случае работы с множеством, так и записаны, в случае с мультимножеством, позволяющим это. Рассмотрим конкретный пример

После добавлений  мы получим 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() - реверсивный указатель на начало контейнера.

set: 2 комментария

    1. Элементы упорядочиваются согласно алфавиту:
      April, February, January, March
      С++ не знает календарь. Так что последний - именно, March.

      Здесь интереснее *(S.rend()). Он совпал с January, но вообще-то используется немного для другого. S.rend() - обратный итератор, указывающий на теоретический элемент непосредственно перед первым элементом в контейнере (который считается его обратным концом). Нужен S.rend(), чтобы можно было похожий цикл составить:

      set<string>::reverse_iterator rit;
      for (rit=S.rbegin(); rit != S.rend(); ++rit)
          cout << ' ' << *rit; // March January February April

Не нашли ответ? Не беда, спросите в комментариях.

Ваш e-mail не будет опубликован. Обязательные поля помечены *