Поделиться через


Классы коллекций ATL

Библиотеки ATL предоставляет множество классов для хранения и доступа к данным. , Какому классу решено использовать зависит от нескольких факторов, включая:

  • Количество данных, которое будет храниться

  • Эффективность по производительности в доступа к данным

  • Возможность доступа к данным индексом или ключом

  • Данные упорядочиваются как

  • Личное параметры

Малые классы коллекций

Библиотеки ATL предоставляет следующие классы массива для ведения дела с нескольких объектов. Однако эти классы ограниченными и предназначены для использования внутри библиотеки ATL. Не рекомендуется использовать их в программах.

Класс

Тип хранилища данных

CSimpleArray

Реализует класс массива для ведения дела с нескольких объектов.

CSimpleMap

Реализует класс сопоставления для ведения дела с нескольких объектов.

Классы коллекций общего назначения

Ниже представлена классификация массивы, списки и сопоставления " и предоставляется как общецелевая коллекция классифицирует:

Класс

Тип хранилища данных

CAtlArray

Реализует массив.

CAtlList

Реализует списка.

CAtlMap

Реализует структуру сопоставления, посредством которого данные могут ссылаться по ключу или значению.

CRBMap

Реализует структуру сопоставления с помощью Красн- Черный алгоритм.

CRBMultiMap

Реализует Красн- Black multimapping структуру.

Эти классы поглотят много ошибок программирования при использовании в отладочные построения, но для ради производительности этих проверок не выполняются в розничных построениях.

Специализированные классы коллекций

Более специализировать классы коллекций также предоставляются для управления указатели памяти и указатели интерфейса:

Класс

Назначение

CAutoPtrArray

Предоставляет методы умных полезные при создании массива указателей.

CAutoPtrList

Предоставляет методы полезных для построения списка умных указателей.

CComUnkArray

Хранит указатели IUnknown и проектирует использоваться в качестве параметра к классу шаблона IConnectionPointImpl.

CHeapPtrList

Предоставляет методы полезных для построения списка указателей кучи.

CInterfaceArray

Предоставляет методы, полезные при создании массива указателей интерфейса модели COM.

CInterfaceList

Предоставляет методы полезных для построения списка указателей интерфейса модели COM.

Выбор класса коллекции

Каждый из доступных классов коллекций предлагает различные характеристики производительности, как показано в таблице ниже.

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

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

  • Описывает столбец 6, позволяет ли каждая фигура повторяющиеся элементы.

  • Производительность данной операции класса коллекции выражается в терминах связи между временем необходимые для завершенных операцию и количество элементов в коллекции. Операция, принимающая количество времени, которое увеличивает линейно по мере увеличения числа увеличений элементов описано, как алгоритм o (n). Напротив, при операции период времени, увеличениям менее, и по мере увеличения числа элементов увеличивает описывают алгоритм o (log n). Следовательно, с точки зрения производительности, алгоритмы o (n) выполняют алгоритмы журнала лучше o (n) больше, как количество увеличений элементов.

Функции фигуры коллекции

Фигура

Упорядоченный?

Индексированный?

Insert

Элемент

Поиск

указанный элемент

Дубликат

элементы?

List

Да

Нет

Быстрый (постоянного времени)

Медленный o (n)

Да

Массив

Да

Int (постоянного времени)

Медленный o (n) за исключением если вставка на окончании, в котором момент варианты постоянно

Медленный o (n)

Да

Сопоставление

Нет

Постоянным ключом (time)

Быстрый (постоянного времени)

Быстрый (постоянного времени)

Нет (ключи) да (значение)

Красн-Черное сопоставление

Да (ключ)

Ключом o (log n)

Быстрый o (log n)

Быстрый o (log n)

Нет

Красн-Черное Multimap

Да (ключ)

Ключом o (log n) (несколько значений в ключ)

Быстрый o (log n)

Быстрый o (log n)

Да (несколько значений в ключ)

Использование объектов CTraits

Так как классы коллекций библиотеку ATL можно использовать для хранения широкий диапазон определяемых пользователем типа данных, может быть полезно иметь возможность переопределить важные функции сравнения. Это достигается с помощью классов CTraits.

Классы CTraits аналогичны, но является более гибким, чем вспомогательные функции классов коллекций MFC; дополнительные сведения см. в разделе Вспомогательные функции классов коллекции.

При построении класс коллекции, можно указать класс CTraits. Этот класс будет содержать код, который выполняется как операции сравнения вызываемый другими методами, которые составляют классом коллекции. Например, если объект списка содержит собственных определяемых пользователем структуры, то можно переопределить только тест равенства для сравнения некоторые переменные членов. Таким образом, метод find объекта списка будет работать в более полезном образом.

Пример

Код

// Collection class / traits class example. 
// This program demonstrates using a CTraits class 
// to create a new comparison operator.

#define MAX_STRING 80

// Define our own data type to store in the list. 

struct MyData 
{
   int ID;
   TCHAR name[MAX_STRING];
   TCHAR address[MAX_STRING];
};

// Define our own traits class, making use of the 
// existing traits and overriding only the comparison 
// we need. 

class MyTraits : public CElementTraits< MyData >
{
public:
    // Override the comparison to only compare 
    // the ID value. 

   static bool CompareElements(const MyData& element1, const MyData& element2)
   {
      if (element1.ID == element2.ID)
         return true;
      else 
         return false;
   };
};

void DoAtlCustomTraitsList()
{
   // Declare the array, with our data type and traits class 

   CAtlList < MyData, MyTraits > MyList;

   // Create some variables of our data type

   MyData add_item, search_item;

   // Add some elements to the list.

   add_item.ID = 1;
   _stprintf_s(add_item.name, _T("Rumpelstiltskin"));
   _stprintf_s(add_item.address, _T("One Grimm Way"));

   MyList.AddHead(add_item);

   add_item.ID = 2;
   _stprintf_s(add_item.name, _T("Rapunzel"));
   _stprintf_s(add_item.address, _T("One Grimm Way"));

   MyList.AddHead(add_item);

   add_item.ID = 3;
   _stprintf_s(add_item.name, _T("Cinderella"));
   _stprintf_s(add_item.address, _T("Two Grimm Way"));

   MyList.AddHead(add_item);

   // Create an element which will be used 
   // to search the list for a match.

   search_item.ID = 2;
   _stprintf_s(search_item.name, _T("Don't care"));
   _stprintf_s(search_item.address, _T("Don't care"));

   // Perform a comparison by searching for a match 
   // between any element in the list, and our 
   // search item. This operation will use the 
   // (overridden) comparison operator and will 
   // find a match when the IDs are the same.

   POSITION i;

   i = MyList.Find(search_item);

   if (i != NULL)
      _tprintf_s(_T("Item found!\n"));
   else
      _tprintf_s(_T("Item not found.\n"));
}

Комментарии

Список классов CTraits см. в разделе Классы коллекций.

Следующая диаграмма показывает иерархию класса для классов CTraits.

Иерархия характеристик классов коллекции

Коллекция образцов classify

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

См. также

Основные понятия

Классы коллекций

Другие ресурсы

Основные понятия активной библиотеки шаблонных классов (ATL)