Подтвердить что ты не робот

Общие варианты использования контейнеров С++

Каковы общие варианты использования стандартных контейнеров библиотеки С++?

  • BitSet
  • Deque
  • список
  • Карта
  • MultiMap
  • мультимножеством
  • priority_queue
  • очереди
  • установить
  • Стек
  • вектор

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

4b9b3361

Ответ 1

Изображение стоит тысячи слов.

блок-схема выбора контейнера

Он доступен от nolyc, информативного бота ## С++ на Freenode, используя команду "Выбор контейнера" или "containerchoice". Ссылка на эту фотографию, которую вы получили в ответ, размещена на adrinael.net, что предполагает, что мы должны поблагодарить Adrinael, члена сообщества Freenode ## С++.

Ответ 2

bitset - используется для хранения бит. Общее назначение - хранить значения некоторых флагов. Для этого вам не нужно больше 1 бит.

deque - двойная очередь - push_back, push_front, pop_back и pop_front - методы базового класса. "Не отсортировано" (неупорядоченный) контейнер.

list - связанный список. Этот контейнер не является непрерывным для памяти. Время добавления и удаления элементов - O (1), но поиск определенного элемента - O (n). Неупорядоченный контейнер.

map - контейнер, хранит пары (std:: pair). Первый - это ключ - каждый элемент с карты должен иметь уникальный ключ. Карта представляется как дерево, поэтому поиск элемента на карте - это n * log (n). Этот контейнер всегда сортируется, поэтому добавление и удаление элементов может вызвать больше времени - дерево (структура данных) является двоичным и сбалансированным.

multimap - почти то же, что и std:: map, но позволяет пары с теми же ключами. Например, multimap может содержать элементы: (666, "alabala" ), (666, "asdfg" ), в то время как стандартная std:: map не может. Этот контейнер также сортируется.

multiset - снова - то же, что и set, но с повторяемыми элементами. set - ну, это также всегда отсортированный контейнер STL. Например, набор {1, 2, 3}, и когда вы пытаетесь добавить '1' в этот набор, он не будет добавлен, так как уже есть такой элемент. (это аналогично математическому множеству). Таким образом, мультимножество позволяет использовать несколько элементов с одинаковым значением, например {1, 1, 1, 2, 3, 4, 4, 4, 4} - это правильный мультимножество, а не набор. Добавление и удаление элемента в std:: set по-прежнему является логарифмическим временем, поскольку оно представлено как двоичное, отсортированное и сбалансированное дерево.

priority_queue - его первый элемент всегда является самым большим из содержащихся в нем элементов, в соответствии с некоторым строгим условием слабого упорядочения. Основная функциональность - push_back и pop_back.

queue - Структура FIFO - сначала во-первых. (или аналогично LILO - Last In - Last Out). Это аналог стандартной очереди - когда вы ходите в магазин и начинаете ждать в очереди, первая из них будет первой. Вы можете просто push_back и pop_front. Неупорядоченный контейнер.

set - Я уже описал это в разделе мультимножества.

stack - LIFO - Last In - First Out - стек. Основная функциональность - push_back, pop_back. Неупорядоченный контейнер.

vector - аналог стандартного массива С++. Он рассматривался как обычный массив, непрерывный по памяти, может быть передан программе C (передающей адрес первого элемента). Неупорядоченный контейнер.

ВАЖНОЕ ПРИМЕЧАНИЕ: Я описал базовую функциональность, а не целую. Подробнее читайте CPlusPlus.com.