Не то, что я знаю, однако это можно сделать в текстовом режиме, я думаю. Кроме того, диаграмма немного выключена, потому что list
не является таким хорошим контейнером в целом, и не является forward_list
. Оба списка являются очень специализированными контейнерами для нишевых приложений.
Чтобы построить такую диаграмму, вам просто нужно два простых руководства:
. Беспокойство о производительности обычно бесполезно вначале.
Существуют две большие категории контейнеров:
find
операцию , а затем вы можете построить несколько адаптеров поверх них: stack
, queue
, priority_queue
. Я оставлю адаптеры здесь, они достаточно специализированы, чтобы быть узнаваемыми.
Вопрос 1: Ассоциативный?
Вопрос 1.1: Упорядочено?
unordered_
, иначе используйте его традиционную упорядоченную копию. Вопрос 1.2: Отдельный ключ?
map
, в противном случае используйте set
Вопрос 1.3: Дубликаты?
multi
, в противном случае нет. Пример:
Предположим, что у меня есть несколько человек с уникальным идентификатором, связанным с ними, и я хотел бы как можно проще получить данные человека из его идентификатора.
find
, таким образом ассоциативный контейнер 1.1. Я не мог заботиться о порядке, таким образом, в контейнере unordered_
1.2. Мой ключ (ID) отделен от значения, с которым он связан, таким образом, map
1.3. Идентификатор уникален, поэтому дубликат не должен появляться. Окончательный ответ: std::unordered_map
.
Вопрос 2: Устойчивость к памяти?
list
Вопрос 2.1: Который?
list
; a forward_list
полезен только для уменьшения объема памяти. Вопрос 3: Динамический размер?
{ ... }
), затем используйте array
. Он заменяет традиционный C-массив, но с удобными функциями. Вопрос 4: Double-end?
deque
, в противном случае используйте vector
. Вы заметите, что по умолчанию, если вам не нужен ассоциативный контейнер, ваш выбор будет vector
. Оказывается, это также рекомендация Саттера и Страуструпа .