Рекомендации по выбору класса коллекции

Эта статья содержит подробные сведения, которые помогут вам выбрать класс коллекции для конкретного приложения.

Выбор класса коллекции зависит от ряда факторов, включая приведенные далее.

  • Возможности формы класса: упорядочение, индексирование и производительность, как показано в таблице Функции форм коллекции далее в этом документе.

  • Использует ли класс шаблоны C++

  • Можно ли сериализовать элементы, хранящиеся в коллекции

  • Можно ли поместить эти элементы в дамп для диагностики

  • Является ли коллекция типобезопасной

В следующей таблице Функции форм коллекцииприведены характеристики доступных форм коллекций.

  • В столбцах 2 и 3 приведены характеристики упорядочения и доступа к каждой форме. В таблице термин "упорядочивается" означает, что порядок вставки и удаления элементов определяет их порядок в коллекции. Это не значит, что элементы сортируются по своему содержимому. Термин "индексируется" означает, что элементы в коллекции можно получать с помощью целочисленного индекса, как элементы в обычном массиве.

  • В столбцах 4 и 5 описывается производительность каждой формы. В приложениях, требующих большого количества вставок в коллекцию, особое значение может иметь скорость вставки, тогда как в других приложениях наиболее важной может оказаться скорость поиска.

  • В столбце 6 указывается допустимость повторяющихся элементов в форме.

Функции форм коллекции

Фигура Занято Индексированных Вставка элемента Поиск указанного элемента Повторяющиеся элементы
Список (List) Да No Быстро Медл. Да
Массив Да По целому числу Медл. Медл. Да
Map No По ключу Быстро Быстро Нет (ключи) Да (значения)

В следующей таблице Характеристики классов коллекций MFCпредставлены другие важные характеристики определенных классов коллекций MFC. Их можно использовать в качестве руководства по выбору. Выбор зависит от следующих факторов: основан ли класс на шаблонах C++, могут ли его элементы быть сериализованы посредством механизма сериализации документов MFC, могут ли его элементы быть помещены в дамп посредством механизма записи в дамп для диагностики, является ли класс типобезопасным (т. е. можно ли гарантировать тип элементов, хранящихся в коллекции и извлекаемых из нее, на основе класса).

Характеристики классов коллекций MFC

Класс Использует C++

шаблоны
С возможностью

Сериализуются
С возможностью

помещен в дамп
Является

типобезопасный
CArray Да Да 1 Да 1 No
CByteArray No Да Да Да 3
CDWordArray No Да Да Да 3
CList Да Да 1 Да 1 No
CMap Да Да 1 Да 1 No
CMapPtrToPtr No No Да No
CMapPtrToWord No No Да No
CMapStringToOb No Да Да No
CMapStringToPtr No No Да No
CMapStringToString No Да Да Да 3
CMapWordToOb No Да Да No
CMapWordToPtr No No Да No
CObArray No Да Да No
CObList No Да Да No
CPtrArray No No Да No
CPtrList No No Да No
CStringArray No Да Да Да 3
CStringList No Да Да Да 3
CTypedPtrArray Да Зависит от обстоятельств 2 Да Да
CTypedPtrList Да Зависит от обстоятельств 2 Да Да
CTypedPtrMap Да Зависит от обстоятельств 2 Да Да
CUIntArray No No Да Да 3
CWordArray No Да Да Да 3
  1. Для сериализации необходимо явным образом вызвать функцию Serialize объекта коллекции. Для помещения в дамп необходимо явным образом вызвать его функцию Dump. Для сериализации нельзя использовать форму ar << collObj , для помещения в дамп нельзя использовать форму dmp<< collObj .

  2. Возможность сериализации зависит от базового типа коллекции. Например, если массив типизированных указателей основан на CObArray, он поддерживает сериализацию. Если он основан на CPtrArray, его нельзя сериализовать. В общем случае классы Ptr нельзя сериализовать.

  3. Если в этом столбце указано значение "Да", нешаблонный класс коллекции является типобезопасным (при условии его использования надлежащим образом). Например, при сохранении байтов в CByteArrayмассив является типобезопасным. Однако если он используется для хранения символов, его типобезопасность не столь очевидна.

См. также

Коллекции
Классы на основе шаблонов
Практическое руководство. Создание типобезопасных коллекций
Доступ ко всем членам коллекции