Compartir por


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 concretas de aplicación.

La elección de una clase de colección depende de varios factores, incluidos:

  • Las características de la forma de clase: orden, indexación y rendimiento, como se muestra en la tabla siguiente Características de la forma de colección de este tema.

  • Si la clase usa plantillas de C++

  • Si los elementos almacenados en la colección pueden serializarse

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

  • Si la colección tiene seguridad de tipos

En la siguiente tabla, Características de la forma 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 acceso y ordenación 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 un elemento especificado Elementos duplicados
Enumerar No Rápido Lento
Matriz Por entero Lento Lento
Asignar No Por clave Rápido Rápido No (claves) Sí (valores)

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

Características de clases de colección de MFC

Clase Usa C++

templates
Puede ser

serialized
Puede ser

volcado
Is

con seguridad de 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 2
CTypedPtrList Depende 2
CTypedPtrMap Depende 2
CUIntArray No No Sí 3
CWordArray No Sí 3
  1. Para serializar, debe llamar explícitamente a la función Serialize del objeto de colección; para volcar, debe llamar explícitamente a la función Dump. No puede usar el formato ar << collObj para serializar ni el formato dmp<< collObj para volcar.

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

  3. Si marca Sí en esta columna, una clase de colección no basada en plantillas tiene seguridad de tipos, siempre que la use según lo previsto. Por ejemplo, si almacena bytes en una CByteArray, la matriz tiene seguridad de tipos. Pero si la usa para almacenar caracteres, su seguridad de tipos es más incierta.

Consulte también

Colecciones
Clases basadas en plantillas
Procedimiento para crear una colección con seguridad de tipos
Acceso a todos los miembros de una colección