Compartir a través de


Clase CMapStringToOb

Una clase de colección de diccionarios que asigna objetos CString únicos a punteros CObject .

Sintaxis

class CMapStringToOb : public CObject

Miembros

Constructores públicos

Nombre Descripción
CMapStringToOb::CMapStringToOb Constructor.

Métodos públicos

Nombre Descripción
CMapStringToOb::GetCount Devuelve el número de elementos en esta asignación.
CMapStringToOb::GetHashTableSize Determina el número actual de elementos de la tabla hash.
CMapStringToOb::GetNextAssoc Obtiene el siguiente elemento para iterar.
CMapStringToOb::GetSize Devuelve el número de elementos en esta asignación.
CMapStringToOb::GetStartPosition Devuelve la posición del primer elemento.
CMapStringToOb::HashKey Calcula el valor hash de una clave especificada.
CMapStringToOb::InitHashTable Inicializa la tabla hash.
CMapStringToOb::IsEmpty Prueba la condición de asignación vacía (sin elementos).
CMapStringToOb::Lookup Busca un puntero nulo basado en la clave de puntero nulo. El valor del puntero, no la entidad a la que apunta, se usa para la comparación de claves.
CMapStringToOb::LookupKey Devuelve una referencia a la clave asociada al valor de clave especificado.
CMapStringToOb::RemoveAll Quita todos los elementos de esta asignación.
CMapStringToOb::RemoveKey Quita un elemento especificado por una clave.
CMapStringToOb::SetAt Inserta un elemento en el mapa; reemplaza un elemento existente si se encuentra una clave coincidente.

Operadores públicos

Nombre Descripción
CMapStringToOb::operator [ ] Inserta un elemento en la asignación: sustitución de operadores para SetAt.

Comentarios

Una vez que haya insertado un par (elemento) CString- CObject* en la asignación, puede recuperar o eliminar el par de forma eficaz mediante una cadena o un valor CString como clave. También puede iterar todos los elementos de la asignación.

Se usa una variable de tipo POSITION para el acceso de entrada alternativo en todas las variaciones de la asignación. Puede usar POSITION para "recordar" una entrada y recorrer en iteración el mapa. Podría pensar que esta iteración es secuencial según el valor de clave; pero no es así. La secuencia de elementos recuperados es indeterminada.

CMapStringToOb incorpora la macro IMPLEMENT_SERIAL para admitir la serialización y el volcado de sus elementos. Cada elemento se serializa a su vez si una asignación se almacena en un archivo, o con el operador de inserción sobrecargada (<<) o con la función miembro Serialize.

Si se necesita un volcado de diagnóstico de los elementos individuales de la asignación (el valor CString y el contenido de CObject), se debe establecer la profundidad del contexto de volcado en 1 o un valor superior.

Cuando se elimina un objeto CMapStringToOb, o cuando se quitan sus elementos, se quitan los objetos CString y los punteros CObject. Los objetos a los que hacen referencia los punteros CObject no se destruyen.

La derivación de clases de asignación es similar a la derivación de listas. Consulta el artículo Colecciones para obtener una ilustración de la derivación de una clase de lista para un propósito especial.

Jerarquía de herencia

CObject

CMapStringToOb

Requisitos

Encabezado: afxcoll.h

CMapStringToOb::CMapStringToOb

Construye una asignación vacía de CString a CObject*.

CMapStringToOb(INT_PTR nBlockSize = 10);

Parámetros

nBlockSize
Especifica la granularidad de la asignación de memoria para extender la asignación.

Comentarios

A medida que crece la asignación, la memoria se asigna en unidades de nBlockSize entradas.

En la tabla siguiente se muestran otras funciones miembro similares a CMapStringToOb:: CMapStringToOb.

Clase Función miembro
CMapPtrToPtr CMapPtrToPtr( INT_PTR nBlockSize = 10 );
CMapPtrToWord CMapPtrToWord( INT_PTR nBlockSize = 10 );
CMapStringToPtr CMapStringToPtr( INT_PTR nBlockSize = 10 );
CMapStringToString CMapStringToString( INT_PTR nBlockSize = 10 );
CMapWordToOb CMapWordToOb( INT_PTR nBlockSize = 10 );
CMapWordToPtr MapWordToPtr( INT_PTR nBlockSize = 10 );

Ejemplo

CMapStringToOb map(20); // Map on the stack with blocksize of 20

CMapStringToOb *pm = new CMapStringToOb; // Map on the heap
                                         // with default blocksize

Consulta CObList::CObList para obtener una lista de la clase CAge que se usa en todos los ejemplos de la colección.

CMapStringToOb::GetCount

Determina cuántos elementos hay en la asignación.

INT_PTR GetCount() const;

Valor devuelto

Número de elementos de esta asignación.

Comentarios

En la tabla siguiente se muestran otras funciones miembro similares a CMapStringToOb::GetCount.

Clase Función miembro
CMapPtrToPtr INT_PTR GetCount() const;
CMapPtrToWord INT_PTR GetCount() const;
CMapStringToPtr INT_PTR GetCount() const;
CMapStringToString INT_PTR GetCount() const;
CMapWordToOb INT_PTR GetCount() const;
CMapWordToPtr INT_PTR GetCount() const;

Ejemplo

Consulta CObList::CObList para obtener una lista de la clase CAge que se usa en todos los ejemplos de la colección.

CMapStringToOb map;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Homer"), new CAge(36));
ASSERT(map.GetCount() == 2);

CMapStringToOb::GetHashTableSize

Determina el número actual de elementos de la tabla hash.

UINT GetHashTableSize() const;

Valor devuelto

Devuelve el número de elementos de la tabla hash.

Comentarios

En la tabla siguiente se muestran otras funciones miembro similares a CMapStringToOb::GetHashTableSize.

Clase Función miembro
CMapPtrToPtr UINT GetHashTableSize() const;
CMapPtrToWord UINT GetHashTableSize() const;
CMapStringToPtr UINT GetHashTableSize() const;
CMapStringToString UINT GetHashTableSize() const;
CMapWordToOb UINT GetHashTableSize() const;
CMapWordToPtr UINT GetHashTableSize() const;

CMapStringToOb::GetNextAssoc

Recupera el elemento de la asignación en rNextPosition y, a continuación, se actualiza rNextPosition para hacer referencia al siguiente elemento de la asignación.

void GetNextAssoc(
    POSITION& rNextPosition,
    CString& rKey,
    CObject*& rValue) const;

Parámetros

rNextPosition
Especifica una referencia a un valor POSITION devuelto por una llamada a GetNextAssoc o GetStartPosition anterior.

rKey
Especifica la clave devuelta del elemento recuperado (una cadena).

rValue
Especifica el valor devuelto del elemento recuperado (un puntero CObject). Consulte Comentarios para más información sobre este parámetro.

Comentarios

Esta función es más útil para recorrer en iteración todos los elementos del mapa. Tenga en cuenta que la secuencia de posición no es necesariamente la misma que la secuencia de valores de clave.

Si el elemento recuperado es el último del mapa, el nuevo valor de rNextPosition se establece en NULL.

Para el parámetro rValue, asegúrese de convertir el tipo de objeto en CObject*&, que es lo que requiere el compilador, como se muestra en el ejemplo siguiente:

CObject *ob;
map.GetNextAssoc(pos, key, (CObject *&)ob);

Esto no es cierto para GetNextAssoc para las asignaciones que se basan en plantillas.

En la tabla siguiente se muestran otras funciones miembro similares a CMapStringToOb::GetNextAssoc.

Clase Función miembro
CMapPtrToPtr void GetNextAssoc( POSITION& rNextPosition , void*& rKey , void*& rValue ) const;
CMapPtrToWord void GetNextAssoc( POSITION& rNextPosition , void*& rKey , WORD& rValue ) const;
CMapStringToPtr void GetNextAssoc( POSITION& rNextPosition , CString& rKey , void*& rValue ) const;
CMapStringToString void GetNextAssoc( POSITION& rNextPosition , CString& rKey , CString& rValue ) const;
CMapWordToOb void GetNextAssoc( POSITION& rNextPosition , WORD& rKey , CObject*& rValue ) const;
CMapWordToPtr void GetNextAssoc( POSITION& rNextPosition , WORD& rKey , void*& rValue ) const;

Ejemplo

Consulta CObList::CObList para obtener una lista de la clase CAge que se usa en todos los ejemplos de la colección.

CMapStringToOb map;
POSITION pos;
CString key;
CAge *pa;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11));
map.SetAt(_T("Homer"), new CAge(36));
map.SetAt(_T("Marge"), new CAge(35));
// Iterate through the entire map, dumping both name and age.
for (pos = map.GetStartPosition(); pos != NULL;)
{
   map.GetNextAssoc(pos, key, (CObject *&)pa);
#ifdef _DEBUG
   afxDump << key << _T(" : ") << pa << _T("\n");
#endif
}

Los resultados de este programa son los siguientes:

Lisa : a CAge at $4724 11
Marge : a CAge at $47A8 35
Homer : a CAge at $4766 36
Bart : a CAge at $45D4 13

CMapStringToOb::GetSize

Devuelve el número de elementos de la asignación.

INT_PTR GetSize() const;

Valor devuelto

El número de elementos de la asignación.

Comentarios

Llame a este método para recuperar el número de elementos del mapa.

En la tabla siguiente se muestran otras funciones miembro similares a CMapStringToOb::GetSize.

Clase Función miembro
CMapPtrToPtr INT_PTR GetSize() const;
CMapPtrToWord INT_PTR GetSize() const;
CMapStringToPtr INT_PTR GetSize() const;
CMapStringToString INT_PTR GetSize() const;
CMapWordToOb INT_PTR GetSize() const;
CMapWordToPtr INT_PTR GetSize() const;

Ejemplo

CMapStringToOb map;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Homer"), new CAge(36));
ASSERT(map.GetSize() == 2);

CMapStringToOb::GetStartPosition

Inicia una iteración de la asignación mediante la devolución de un valor POSITION que se puede pasar a una llamada a GetNextAssoc.

POSITION GetStartPosition() const;

Valor devuelto

Un valor POSITION que indica una posición inicial para iterar la asignación; o NULL si la asignación está vacía.

Comentarios

La secuencia de iteración no es predecible; por lo tanto, el "primer elemento de la asignación" no tiene importancia especial.

En la tabla siguiente se muestran otras funciones miembro similares a CMapStringToOb::GetStartPosition.

Clase Función miembro
CMapPtrToPtr POSITION GetStartPosition() const;
CMapPtrToWord POSITION GetStartPosition() const;
CMapStringToPtr POSITION GetStartPosition() const;
CMapStringToString POSITION GetStartPosition() const;
CMapWordToOb POSITION GetStartPosition() const;
CMapWordToPtr POSITION GetStartPosition() const;

Ejemplo

Vea el ejemplo de CMapStringToOb::GetNextAssoc.

CMapStringToOb::HashKey

Calcula el valor hash de una clave especificada.

UINT HashKey(LPCTSTR key) const;

Parámetros

key
Clave cuyo valor hash se va a calcular.

Valor devuelto

Valor hash de la clave

Comentarios

En la tabla siguiente se muestran otras funciones miembro similares a CMapStringToOb::HashKey.

Clase Función miembro
CMapPtrToPtr UINT HashKey( void *key ) const;
CMapPtrToWord UINT HashKey( void *key ) const;
CMapStringToString UINT HashKey( LPCTSTR key ) const;
CMapStringToPtr UINT HashKey( LPCTSTR key ) const;
CMapWordToOb UINT HashKey( WORD key ) const;
CMapWordToPtr UINT HashKey( WORD key ) const;

CMapStringToOb::InitHashTable

Inicializa la tabla hash.

void InitHashTable(
    UINT hashSize,
    BOOL bAllocNow = TRUE);

Parámetros

hashSize
Número de entradas de la tabla hash.

bAllocNow
Si es TRUE, se asigna la tabla hash después de la inicialización; de lo contrario, la tabla se asigna cuando es necesario.

Comentarios

Para obtener el mejor rendimiento, el tamaño de la tabla hash debe ser un número primo. Para minimizar las colisiones, el tamaño debe ser aproximadamente un 20 por ciento mayor que el conjunto de datos previsto más grande.

En la tabla siguiente se muestran otras funciones miembro similares a CMapStringToOb::InitHashTable.

Clase Función miembro
CMapPtrToPtr void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );
CMapPtrToWord void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );
CMapStringToString void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );
CMapStringToPtr void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );
CMapWordToOb void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );
CMapWordToPtr void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );

CMapStringToOb::IsEmpty

Determina si la asignación está vacía.

BOOL IsEmpty() const;

Valor devuelto

Distinto de cero si esta asignación no contiene elementos; de lo contrario, 0.

Ejemplo

Vea el ejemplo de RemoveAll.

Comentarios

En la tabla siguiente se muestran otras funciones miembro similares a CMapStringToOb:: IsEmpty.

Clase Función miembro
CMapPtrToPtr BOOL IsEmpty() const;
CMapPtrToWord BOOL IsEmpty() const;
CMapStringToPtr BOOL IsEmpty() const;
CMapStringToString BOOL IsEmpty() const;
CMapWordToOb BOOL IsEmpty() const;
CMapWordToPtr BOOL IsEmpty() const;

CMapStringToOb::Lookup

Devuelve un puntero CObject basado en un valor CString.

BOOL Lookup(
    LPCTSTR key,
    CObject*& rValue) const;

Parámetros

key
Especifica la clave de cadena que identifica el elemento que se va a buscar.

rValue
Especifica el valor devuelto del elemento buscado.

Valor devuelto

Distinto de cero si se ha encontrado el elemento; de lo contrario, 0.

Comentarios

Lookup usa un algoritmo hash para buscar, de forma rápida, el elemento de mapa con una clave que coincida exactamente (valor CString).

En la tabla siguiente se muestran otras funciones miembro similares a CMapStringToOb::LookUp.

Clase Función miembro
CMapPtrToPtr BOOL Lookup( void *key , void*& rValue ) const;
CMapPtrToWord BOOL Lookup( void *key , WORD& rValue ) const;
CMapStringToPtr BOOL Lookup( LPCTSTR key , void*& rValue ) const;
CMapStringToString BOOL Lookup( LPCTSTR key , CString& rValue ) const;
CMapWordToOb BOOL Lookup( WORD key , CObject*& rValue ) const;
CMapWordToPtr BOOL Lookup( WORD key , void*& rValue ) const;

Ejemplo

Consulta CObList::CObList para obtener una lista de la clase CAge que se usa en todos los ejemplos de la colección.

CMapStringToOb map;
CAge *pa;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11));
map.SetAt(_T("Homer"), new CAge(36));
map.SetAt(_T("Marge"), new CAge(35));
ASSERT(map.Lookup(_T("Lisa"), (CObject *&)pa)); // Is "Lisa" in the map?
ASSERT(*pa == CAge(11));                        // Is she 11?

CMapStringToOb::LookupKey

Devuelve una referencia a la clave asociada al valor de clave especificado.

BOOL LookupKey(
    LPCTSTR key,
    LPCTSTR& rKey) const;

Parámetros

key
Especifica la clave de cadena que identifica el elemento que se va a buscar.

rKey
Referencia a la clave asociada.

Valor devuelto

Distinto de cero si se encontró la clave; de lo contrario, 0.

Comentarios

El uso de una referencia a una clave no es seguro si se usa después de quitar el elemento asociado de la asignación o después de destruir esta.

En la tabla siguiente se muestran otras funciones miembro similares a CMapStringToOb:: LookupKey.

Clase Función miembro
CMapStringToPtr BOOL LookupKey( LPCTSTR key , LPCTSTR& rKey ) const;
CMapStringToString BOOL LookupKey( LPCTSTR key , LPCTSTR& rKey ) const;

CMapStringToOb::operator [ ]

Un sustituto conveniente de la función miembro SetAt.

CObject*& operator[ ](lpctstr key);

Valor devuelto

Referencia a un puntero a un objeto CObject; o NULL si la asignación está vacía o key está fuera del intervalo.

Comentarios

Por tanto, solo se puede usar en el lado izquierdo de una instrucción de asignación (un l-value). Si no hay ningún elemento de asignación con la clave especificada, se crea un nuevo elemento.

No hay ningún "lado derecho" (r-value) equivalente a este operador porque existe la posibilidad de que no se encuentre una clave en la asignación. Use la función miembro Lookup para la recuperación de elementos.

En la tabla siguiente se muestran otras funciones miembro similares a CMapStringToOb::operator [].

Clase Función miembro
CMapPtrToPtr void*& operator[](void *key );
CMapPtrToWord WORD& operator[](void *key );
CMapStringToPtr void*& operator[](lpctstr key );
CMapStringToString CString& operator[](lpctstr key );
CMapWordToOb CObject*& operator[](word key );
CMapWordToPtr void*& operator[](word key );

Ejemplo

Consulta CObList::CObList para obtener una lista de la clase CAge que se usa en todos los ejemplos de la colección.

CMapStringToOb map;

map[_T("Bart")] = new CAge(13);
map[_T("Lisa")] = new CAge(11);
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("Operator [] example: ") << &map << _T("\n");
#endif

Los resultados de este programa son los siguientes:

Operator [] example: A CMapStringToOb with 2 elements
[Lisa] = a CAge at $4A02 11
[Bart] = a CAge at $497E 13

CMapStringToOb::RemoveAll

Quita todos los elementos de esta asignación y destruye los objetos clave CString.

void RemoveAll();

Comentarios

Los objetos CObject a los que hace referencia cada clave no se destruyen. La función RemoveAll puede provocar fugas de memoria si no se asegura de que se destruyen los objetos CObject a los que se hace referencia.

La función funciona correctamente si la asignación ya está vacía.

En la tabla siguiente se muestran otras funciones miembro similares a CMapStringToOb::RemoveAll.

Clase Función miembro
CMapPtrToPtr void RemoveAll();
CMapPtrToWord void RemoveAll();
CMapStringToPtr void RemoveAll();
CMapStringToString void RemoveAll();
CMapWordToOb void RemoveAll();
CMapWordToPtr void RemoveAll();

Ejemplo

Consulta CObList::CObList para obtener una lista de la clase CAge que se usa en todos los ejemplos de la colección.

{
   CMapStringToOb map;

   CAge age1(13); // Two objects on the stack
   CAge age2(36);
   map.SetAt(_T("Bart"), &age1);
   map.SetAt(_T("Homer"), &age2);
   ASSERT(map.GetCount() == 2);
   map.RemoveAll(); // CObject pointers removed; objects not removed.
   ASSERT(map.GetCount() == 0);
   ASSERT(map.IsEmpty());
} // The two CAge objects are deleted when they go out of scope.

CMapStringToOb::RemoveKey

Busca la entrada de la asignación correspondiente a la clave proporcionada; después, si se encuentra la clave, se elimina la entrada.

BOOL RemoveKey(LPCTSTR key);

Parámetros

key
Especifica la cadena usada para la búsqueda de asignación.

Valor devuelto

Distinto de cero si la entrada se ha encontrado y se ha quitado correctamente; de lo contrario, 0.

Comentarios

Esto puede provocar fugas de memoria si el objeto CObject no se elimina en otro lugar.

En la tabla siguiente se muestran otras funciones miembro similares a CMapStringToOb::RemoveKey.

Clase Función miembro
CMapPtrToPtr BOOL RemoveKey( void *key );
CMapPtrToWord BOOL RemoveKey( void *key );
CMapStringToPtr BOOL RemoveKey( LPCTSTR key );
CMapStringToString BOOL RemoveKey( LPCTSTR key );
CMapWordToOb BOOL RemoveKey( WORD key );
CMapWordToPtr BOOL RemoveKey( WORD key );

Ejemplo

Consulta CObList::CObList para obtener una lista de la clase CAge que se usa en todos los ejemplos de la colección.

CMapStringToOb map;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11));
map.SetAt(_T("Homer"), new CAge(36));
map.SetAt(_T("Marge"), new CAge(35));
map.RemoveKey(_T("Lisa")); // Memory leak: CAge object not
                           // deleted.
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("RemoveKey example: ") << &map << _T("\n");
#endif

Los resultados de este programa son los siguientes:

RemoveKey example: A CMapStringToOb with 3 elements
[Marge] = a CAge at $49A0 35
[Homer] = a CAge at $495E 36
[Bart] = a CAge at $4634 13

CMapStringToOb::SetAt

El medio principal para insertar un elemento en una asignación.

void SetAt(
    LPCTSTR key,
    CObject* newValue);

Parámetros

key
Especifica la cadena que es la clave del nuevo elemento.

newValue
Especifica el puntero CObject que es el valor del nuevo elemento.

Comentarios

En primer lugar, se busca la clave. Si se encuentra la clave, se cambia el valor correspondiente; de lo contrario, se crea un nuevo elemento clave-valor.

En la tabla siguiente se muestran otras funciones miembro similares a CMapStringToOb::SetAt.

Clase Función miembro
CMapPtrToPtr void SetAt( void *key , void *newValue );
CMapPtrToWord void SetAt( void *key , WORD newValue );
CMapStringToPtr void SetAt( LPCTSTR key , void *newValue );
CMapStringToString void SetAt( LPCTSTR key , LPCTSTR newValue );
CMapWordToOb void SetAt( WORD key , CObject *newValue );
CMapWordToPtr void SetAt( WORD key , void *newValue );

Ejemplo

Consulta CObList::CObList para obtener una lista de la clase CAge que se usa en todos los ejemplos de la colección.

CMapStringToOb map;
CAge *pa;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11)); // Map contains 2
                                     // elements.
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("before Lisa's birthday: ") << &map << _T("\n");
#endif
if (map.Lookup(_T("Lisa"), (CObject *&)pa))
{ // CAge 12 pointer replaces CAge 11 pointer.
   map.SetAt(_T("Lisa"), new CAge(12));
   delete pa; // Must delete CAge 11 to avoid memory leak.
}
#ifdef _DEBUG
afxDump << _T("after Lisa's birthday: ") << &map << _T("\n");
#endif

Los resultados de este programa son los siguientes:

before Lisa's birthday: A CMapStringToOb with 2 elements
[Lisa] = a CAge at $493C 11
[Bart] = a CAge at $4654 13
after Lisa's birthday: A CMapStringToOb with 2 elements
[Lisa] = a CAge at $49C0 12
[Bart] = a CAge at $4654 13

Consulte también

CObject (clase)
Gráfico de jerarquías
CMapPtrToPtr (clase)
CMapPtrToWord (clase)
CMapStringToPtr (clase)
CMapStringToString (clase)
CMapWordToOb (clase)
CMapWordToPtr (clase)