Compartilhar via


Recomendações para escolher uma classe de coleção

Este artigo contém informações detalhadas pensadas para ajudá-lo a escolher uma classe de coleção para suas necessidades específicas do aplicativo.

Sua escolha de uma classe de coleção depende de vários fatores, incluindo:

  • As funcionalidades da forma de classe: ordem, indexação e desempenho, conforme mostrado na tabela Recursos de forma de coleção mais adiante neste tópico

  • Se a classe usa modelos C++

  • Se os elementos armazenados na coleção podem ser serializados

  • Se os elementos armazenados na coleção podem ser despejados para diagnóstico

  • Se a coleção é fortemente tipada

A tabela a seguir, Recursos de forma de coleção, resume as características das formas de coleção disponíveis.

  • As colunas 2 e 3 descrevem as características de ordenação e acesso de cada forma. Na tabela, o termo "ordenado" significa que a ordem na qual os itens são inseridos e excluídos determina a ordem deles na coleção, mas isso não significa que os itens sejam classificados em seu conteúdo. O termo "indexado" significa que os itens na coleção podem ser recuperados por um índice inteiro, assim como itens em uma matriz típica.

  • As colunas 4 e 5 descrevem o desempenho de cada forma. Em aplicativos que exigem muitas inserções na coleção, a velocidade de inserção pode ser especialmente importante, embora para outros aplicativos, a velocidade de pesquisa talvez seja mais importante.

  • A coluna 6 descreve se cada forma permite elementos duplicados.

Recursos de forma da coleção

Forma Encomenda feita Indexado Inserir um elemento Pesquisar elemento especificado Duplicar elementos
Lista Sim Não Rápido Lento Sim
Array Sim Por int Lento Lento Sim
Mapeamento Não Por chave Rápido Rápido Não (chaves) Sim (valores)

A tabela a seguir, Características das classes de coleção MFC, resume outras características importantes de classes de coleção MFC específicas como um guia de seleção. Sua escolha pode depender se a classe é baseada em modelos C++, se seus elementos podem ser serializados por meio do mecanismo de serialização de documentos do MFC, se seus elementos podem ser despejados por meio do mecanismo de despejo de diagnóstico do MFC ou se a classe é fortemente tipada, ou seja, se você pode garantir o tipo de elementos armazenados e recuperados de uma coleção com base na classe.

Características das classes de coleção MFC

Classe Usa C++

modelos
Pode ser

serializado
Pode ser

despejada
É

fortemente tipada
CArray Sim Sim 1 Sim 1 Não
CByteArray No Sim Sim Sim 3
CDWordArray Não Sim Sim Sim 3
CList Sim Sim 1 Sim 1 Não
CMap Sim Sim 1 Sim 1 Não
CMapPtrToPtr No No Sim No
CMapPtrToWord No No Sim No
CMapStringToOb No Sim Sim No
CMapStringToPtr No No Sim No
CMapStringToString No Sim Sim Sim 3
CMapWordToOb Não Sim Sim No
CMapWordToPtr No No Sim No
CObArray No Sim Sim No
CObList No Sim Sim No
CPtrArray No No Sim No
CPtrList No No Sim No
CStringArray No Sim Sim Sim 3
CStringList Não Sim Sim Sim 3
CTypedPtrArray Sim Depende 2 Sim Sim
CTypedPtrList Yes Depende 2 Sim Sim
CTypedPtrMap Yes Depende 2 Sim Sim
CUIntArray No No Sim Sim 3
CWordArray Não Sim Sim Sim 3
  1. Para serializar, você deve chamar explicitamente a função Serialize do objeto de coleção; para despejar, você deve chamar explicitamente sua função Dump. Você não pode usar a forma ar << collObj para serializar ou a forma dmp<< collObj para despejar.

  2. A possibilidade de serialização depende do tipo de coleção subjacente. Por exemplo, se uma matriz de ponteiro tipada for baseada em CObArray, ela poderá ser serializada; se for baseada em CPtrArray, ela não poderá ser serializada. Em geral, as classes "Ptr" não podem ser serializadas.

  3. Se marcada como Sim nesta coluna, uma classe de coleção não modelo será fortemente tipada, desde que você a use conforme o esperado. Por exemplo, se você armazenar bytes em um CByteArray, a matriz será fortemente tipada. Mas se você usá-lo para armazenar caracteres, é menos provável que ela será fortemente tipada.

Confira também

Coleções
Classes com base no modelo
Como fazer uma coleção fortemente tipada
Acessando todos os membros de uma coleção