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 | Sí | No | Rápido | Lento | Sí |
Matriz | Sí | Por entero | Lento | Lento | Sí |
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í | Sí 1 | Sí 1 | No |
CByteArray |
No | Sí | Sí | Sí 3 |
CDWordArray |
No | Sí | Sí | Sí 3 |
CList |
Sí | Sí 1 | Sí 1 | No |
CMap |
Sí | Sí 1 | Sí 1 | No |
CMapPtrToPtr |
No | No | Sí | No |
CMapPtrToWord |
No | No | Sí | No |
CMapStringToOb |
No | Sí | Sí | No |
CMapStringToPtr |
No | No | Sí | No |
CMapStringToString |
No | Sí | Sí | Sí 3 |
CMapWordToOb |
No | Sí | Sí | No |
CMapWordToPtr |
No | No | Sí | No |
CObArray |
No | Sí | Sí | No |
CObList |
No | Sí | Sí | No |
CPtrArray |
No | No | Sí | No |
CPtrList |
No | No | Sí | No |
CStringArray |
No | Sí | Sí | Sí 3 |
CStringList |
No | Sí | Sí | Sí 3 |
CTypedPtrArray |
Sí | Depende 2 | Sí | Sí |
CTypedPtrList |
Sí | Depende 2 | Sí | Sí |
CTypedPtrMap |
Sí | Depende 2 | Sí | Sí |
CUIntArray |
No | No | Sí | Sí 3 |
CWordArray |
No | Sí | Sí | Sí 3 |
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ónDump
. No puede usar el formatoar << collObj
para serializar ni el formatodmp
<< collObj
para volcar.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 enCPtrArray
, no es serializable. En general, las clases "Ptr" no se pueden serializar.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