Compartir a través de


Recomendaciones para elegir una clase de colección

Este artículo contiene información detallada diseñada para ayudarle a elegir una clase de colección para sus necesidades específicas de la aplicación.

La elección de una clase de colección depende de varios factores, entre los que se incluyen:

  • Las características de la forma de clase: orden, indexación y rendimiento, como se muestra en la tabla Características de formas de colección más adelante en este tema

  • Si la clase usa plantillas de C++

  • Si los elementos almacenados en la colección se pueden serializar

  • Si los elementos almacenados en la colección se pueden volcar para diagnósticos

  • Si la colección es segura para tipos

En la tabla siguiente, Características de formas de colección, se resumen las características de las formas de colección disponibles.

  • Las columnas 2 y 3 describen las características de ordenación y acceso de cada forma. En la tabla, el término "ordenado" significa que el orden en el que se insertan o eliminan los elementos determina su orden en la colección; no significa que los elementos se ordenan por su contenido. El término “indexado” significa que los elementos de la colección se pueden recuperar mediante un índice entero, como los elementos de una matriz estándar.

  • Las columnas 4 y 5 describen el rendimiento de cada forma. En aplicaciones que requieren muchas inserciones en la colección, la velocidad de inserción puede ser especialmente importante; para otras aplicaciones, puede ser más importante la velocidad de búsqueda.

  • En la columna 6 se describe si cada forma permite elementos duplicados.

Características de la forma de colección

Forma Pedido .Indexado Insertar un elemento Buscar el elemento especificado Elementos duplicados
Lista No Rápido Lento
Arreglo Por int Lento Lento
Mapa No Por clave Rápido Rápido No (claves) Sí (valores)

En la tabla siguiente, Características de las clases de colección MFC, se resumen otras características importantes de clases de colección MFC específicas como guía para la selección. Su elección puede depender de si la clase se basa en plantillas de C++, si sus elementos se pueden serializar a través del mecanismo de serialización de documentos de MFC, si sus elementos se pueden volcar a través del mecanismo de volcado de diagnóstico de MFC o si la clase es segura para tipos, es decir, si puede garantizar el tipo de elementos almacenados en una colección y recuperada de una colección basada en la clase .

Características de las clases de colección MFC

Clase Usa C++

Plantillas
Puede ser

Serializado
Puede ser

Dejó
Es

seguro para tipos
CArray Sí 1 Sí 1 No
CByteArray No Sí 3
CDWordArray No Sí 3
CList Sí 1 Sí 1 No
CMap Sí 1 Sí 1 No
CMapPtrToPtr No No No
CMapPtrToWord No No No
CMapStringToOb No No
CMapStringToPtr No No No
CMapStringToString No Sí 3
CMapWordToOb No No
CMapWordToPtr No No No
CObArray No No
CObList No No
CPtrArray No No No
CPtrList No No No
CStringArray No Sí 3
CStringList No Sí 3
CTypedPtrArray Depende de 2
CTypedPtrList Depende de 2
CTypedPtrMap Depende de 2
CUIntArray No No Sí 3
CWordArray No Sí 3
  1. Para serializar, debe llamar explícitamente a la función del objeto de Serialize colección; para volcar, debe llamar explícitamente a su Dump función. No puede usar el formulario ar << collObj para serializar o el formulario dmp<< collObj que se va a volcar.

  2. La serialización depende del tipo de colección subyacente. Por ejemplo, si una matriz de punteros con tipo se basa en CObArray, se puede serializar; si se basa en CPtrArray, no se puede serializar. En general, las clases "Ptr" no se pueden serializar.

  3. Si se marca como Sí en esta columna, una clase de colección nontemplate es segura para tipos siempre que la use según lo previsto. Por ejemplo, si almacena bytes en , CByteArrayla matriz es segura para tipos. Pero si lo usas para almacenar caracteres, su seguridad de tipo es menor.

Consulte también

Colecciones
clases deTemplate-Based
Cómo: Crear una colección de Type-Safe
Acceso a todos los miembros de una colección