Compartir a través de


Clases de colección de ATL

ATL proporciona muchas clases para los datos que almacena y de acceso.Qué clase decide utilizar depende de varios factores, incluyendo:

  • La cantidad de datos que se almacenarán

  • Eficacia de rendimiento en el acceso de los datos

  • La capacidad de tener acceso a los datos por índice o por clave

  • Cómo se ordena los datos

  • Preferencia personal

Pequeñas clases de colección

ATL proporciona las siguientes clases de matriz para tratar con una pequeña cantidad de objetos.Sin embargo, estas clases están limitadas y que se van a usar internamente para ATL.No se recomienda que se utilizan en los programas.

Clase

Tipo de almacenamiento de datos

CSimpleArray

Implementa una clase array para tratar con una pequeña cantidad de objetos.

CSimpleMap

Implementa una clase de asignación para tratar con una pequeña cantidad de objetos.

Clases de colección de uso general

Las clases de siguiente implementan las matrices, listas, y los mapas y se proporcionan como clases de colección de uso general:

Clase

Tipo de almacenamiento de datos

CAtlArray

Implementa una matriz.

CAtlList

Implementa una lista.

CAtlMap

Implementa una estructura de asignación, por el que los datos puedan hacer referencia mediante una clave o un valor.

CRBMap

Implementa una estructura de asignación mediante el algoritmo de Rojo- Negro.

CRBMultiMap

Implementa una estructura multimapping de Rojo- Negro.

Estas clases interceptarán muchos errores de programación cuando se utilizan en compilaciones de depuración, pero para el motivo de rendimiento, estas comprobaciones no se realizadas en compila comercial.

Clases de colección especializadas

Clases de colección especializadas también se proporcionan para administrar punteros de memoria y punteros de interfaz:

Clase

Propósito

CAutoPtrArray

Proporciona métodos útiles al crear una matriz de punteros inteligentes.

CAutoPtrList

Proporciona métodos útiles al crear una lista de punteros inteligentes.

CComUnkArray

Almacena los punteros de IUnknown y es utilizado como parámetro a la clase de plantilla de IConnectionPointImpl .

CHeapPtrList

Proporciona métodos útiles al crear una lista de punteros de la pila.

CInterfaceArray

Proporciona métodos útiles al crear una matriz de punteros de interfaz COM.

CInterfaceList

Proporciona métodos útiles al crear una lista de punteros de interfaz COM.

Elegir una clase de colección

Cada una de las clases de colección disponibles proporciona varias características de rendimiento, como se muestra en la siguiente tabla.

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

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

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

  • El rendimiento de una operación determinada de la clase de colección se expresa en términos de relación entre el tiempo necesario para completar la operación y el número de elementos de la colección.Una operación que toma una cantidad de tiempo que aumenta linealmente como el número de mejoras de elementos se describe como O (n) algoritmo.Por el contrario, una operación que toma un período de tiempo que aumenta cada vez menos como el número de mejoras de elementos se describe como O (algoritmo log n).Por consiguiente, en términos de rendimiento, O (algoritmos de log n) supera O (n) los algoritmos cada vez más como el número de elementos aumenta.

Características de la colección

Forma

¿Secuenciado?

¿Indizado?

Inserte

element

Buscar

elemento especificado

Duplicado

¿elementos?

List

No

Rápido (tiempo constante)

o lento (n)

Matriz

Por int (tiempo constante)

Reduzca O (n) excepto si inserta al final, en este caso es constante sincronizar

o lento (n)

Mapa

No

Por clave (tiempo constante)

Rápido (tiempo constante)

Rápido (tiempo constante)

Ningún Sí (keys) (valores)

Mapa de Rojo- Negro

Sí (por clave)

Mediante una clave O (log n)

Rápido o (log n)

Rápido o (log n)

No

Rojo-Negro Multimap

Sí (por clave)

Mediante una clave O (log n) (varios valores por clave)

Rápido o (log n)

Rápido o (log n)

Sí (varios valores por clave)

Mediante los objetos de CTraits

Mientras que las clases de colección ATL se pueden utilizar para almacenar una amplia gama de tipos de datos definidos por el usuario, puede ser útil poder reemplazar funciones importantes como comparaciones.Esto se logra utilizando las clases de CTraits.

Las clases de CTraits son similares a, pero más flexibles que, las funciones auxiliares de la clase de colección MFC; vea Aplicaciones auxiliares de la clase de colección para obtener más información.

Al crear la clase de colección, tiene la opción de especificar una clase de CTraits.Esta clase contendrá código que realizará operaciones como comparaciones cuando es llamado por los demás métodos que constituyen la clase de colección.Por ejemplo, si el objeto de la lista contiene sus propias estructuras definidas por el usuario, desea volver a definir la prueba de igualdad para comparar solo a determinadas variables miembro.De esta manera, el método de búsqueda del objeto de lista funcionará de una manera más útil.

Ejemplo

15e672bd.collapse_all(es-es,VS.110).gifCódigo

// 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"));
}

Comentarios

Para obtener una lista de las clases de CTraits, vea clases de colección.

El diagrama siguiente muestra la jerarquía de clases para las clases de CTraits.

Jerarquía de rasgos de clases de colección

Ejemplos de las clases de colección

Los ejemplos siguientes muestran las clases de colección:

Vea también

Conceptos

Clases de colección

Otros recursos

Conceptos de ATL