Partilhar via


CMapStringToOb Classe

Uma classe de coleção de dicionário que mapeia objetos exclusivos CString para CObject ponteiros.

Sintaxe

class CMapStringToOb : public CObject

Membros

Construtores Públicos

Nome Descrição
CMapStringToOb::CMapStringToOb Construtor.

Métodos Públicos

Nome Descrição
CMapStringToOb::GetCount Devolve o número de elementos neste mapa.
CMapStringToOb::GetHashTableSize Determina o número atual de elementos na tabela de hash.
CMapStringToOb::GetNextAssoc Obtém o próximo elemento para iteração.
CMapStringToOb::GetSize Devolve o número de elementos neste mapa.
CMapStringToOb::GetStartPosition Devolve a posição do primeiro elemento.
CMapStringToOb::HashKey Calcula o valor de hash de uma chave especificada.
CMapStringToOb::InitHashTable Inicializa a tabela de hash.
CMapStringToOb::IsEmpty Testes para a condição de mapa vazio (sem elementos).
CMapStringToOb::Lookup Procura um ponteiro vazio com base na chave do ponteiro vazio. O valor do ponteiro, não a entidade para a qual aponta, é usado para a comparação de chaves.
CMapStringToOb::LookupKey Retorna uma referência à chave associada ao valor de chave especificado.
CMapStringToOb::RemoveAll Remove todos os elementos deste mapa.
CMapStringToOb::RemoveKey Remove um elemento especificado por uma chave.
CMapStringToOb::SetAt Insere um elemento no mapa; substitui um elemento existente se uma chave correspondente for encontrada.

Operadores Públicos

Nome Descrição
CMapStringToOb::operator [ ] Insere um elemento no mapa — substituição do operador por SetAt.

Observações

Depois de inserir um CString- CObject* par (elemento) no mapa, você pode recuperar ou excluir o par usando uma cadeia de caracteres ou um CString valor como chave. Você também pode iterar sobre todos os elementos no mapa.

Uma variável de tipo POSITION é usada para acesso de entrada alternativa em todas as variações de mapa. Você pode usar um POSITION para "lembrar" uma entrada e iterar através do mapa. Você pode pensar que essa iteração é sequencial por valor de chave; Não é. A sequência de elementos recuperados é indeterminada.

CMapStringToOb incorpora a macro para suportar a IMPLEMENT_SERIAL serialização e o despejo de seus elementos. Cada elemento é serializado por sua vez se um mapa é armazenado em um arquivo, seja com o operador de inserção sobrecarregado ( <<) ou com a Serialize função de membro.

Se você precisar de um despejo de diagnóstico dos elementos individuais no mapa (o CString valor e o CObject conteúdo), deverá definir a profundidade do contexto de despejo como 1 ou superior.

Quando um CMapStringToOb objeto é excluído, ou quando seus elementos são removidos, os CString objetos e os CObject ponteiros são removidos. Os objetos referenciados CObject pelos ponteiros não são destruídos.

A derivação de classe de mapa é semelhante à derivação de lista. Consulte o artigo Coleções para obter uma ilustração da derivação de uma classe de lista para fins especiais.

Hierarquia de herança

CObject

CMapStringToOb

Requerimentos

Cabeçalho:afxcoll.h

CMapStringToOb::CMapStringToOb

Constrói um mapa vazioCStringCObject*.

CMapStringToOb(INT_PTR nBlockSize = 10);

Parâmetros

nBlockSize
Especifica a granularidade de alocação de memória para estender o mapa.

Observações

À medida que o mapa cresce, a memória é alocada em unidades de nBlockSize entradas.

A tabela a seguir mostra outras funções de membro semelhantes ao CMapStringToOb:: CMapStringToOb.

Classe Função de Membro
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 );

Exemplo

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

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

Consulte CObList::CObList para obter uma lista da CAge classe usada em todos os exemplos de coleção.

CMapStringToOb::GetCount

Determina quantos elementos estão no mapa.

INT_PTR GetCount() const;

Valor de retorno

O número de elementos neste mapa.

Observações

A tabela a seguir mostra outras funções de membro semelhantes ao CMapStringToOb::GetCount.

Classe Função de Membro
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;

Exemplo

Consulte CObList::CObList para obter uma lista da CAge classe usada em todos os exemplos de coleção.

CMapStringToOb map;

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

CMapStringToOb::GetHashTableSize

Determina o número atual de elementos na tabela de hash.

UINT GetHashTableSize() const;

Valor de retorno

Retorna o número de elementos na tabela de hash.

Observações

A tabela a seguir mostra outras funções de membro semelhantes ao CMapStringToOb::GetHashTableSize.

Classe Função de Membro
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 o elemento de mapa em e, em rNextPositionseguida, atualiza rNextPosition para fazer referência ao próximo elemento no mapa.

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

Parâmetros

rNextPosition
Especifica uma referência a um valor POSITION retornado por uma chamada anterior GetNextAssoc ou GetStartPosition chamada.

rKey
Especifica a chave retornada do elemento recuperado (uma cadeia de caracteres).

rValue
Especifica o valor retornado do elemento recuperado (um CObject ponteiro). Consulte Comentários para obter mais informações sobre esse parâmetro.

Observações

Esta função é mais útil para iterar através de todos os elementos no mapa. Observe que a sequência de posição não é necessariamente a mesma que a sequência de valores de chave.

Se o elemento recuperado for o último no mapa, o novo valor de rNextPosition será definido como NULL.

Para o rValue parâmetro, certifique-se de converter seu tipo de objeto para CObject*&, que é o que o compilador requer, conforme mostrado no exemplo a seguir:

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

Isso não é verdade GetNextAssoc para mapas baseados em modelos.

A tabela a seguir mostra outras funções de membro semelhantes ao CMapStringToOb::GetNextAssoc.

Classe Função de Membro
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;

Exemplo

Consulte CObList::CObList para obter uma lista da CAge classe usada em todos os exemplos de coleção.

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
}

Os resultados deste programa são os seguintes:

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

Retorna o número de elementos de mapa.

INT_PTR GetSize() const;

Valor de retorno

O número de itens no mapa.

Observações

Chame esse método para recuperar o número de elementos no mapa.

A tabela a seguir mostra outras funções de membro semelhantes ao CMapStringToOb::GetSize.

Classe Função de Membro
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;

Exemplo

CMapStringToOb map;

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

CMapStringToOb::GetStartPosition

Inicia uma iteração de mapa retornando um POSITION valor que pode ser passado para uma GetNextAssoc chamada.

POSITION GetStartPosition() const;

Valor de retorno

Um POSITION valor que indica uma posição inicial para iterar o mapa ou NULL se o mapa está vazio.

Observações

A sequência de iteração não é previsível; portanto, o "primeiro elemento no mapa" não tem significado especial.

A tabela a seguir mostra outras funções de membro semelhantes ao CMapStringToOb::GetStartPosition.

Classe Função de Membro
CMapPtrToPtr POSITION GetStartPosition() const;
CMapPtrToWord POSITION GetStartPosition() const;
CMapStringToPtr POSITION GetStartPosition() const;
CMapStringToString POSITION GetStartPosition() const;
CMapWordToOb POSITION GetStartPosition() const;
CMapWordToPtr POSITION GetStartPosition() const;

Exemplo

Veja o exemplo para CMapStringToOb::GetNextAssoc.

CMapStringToOb::HashKey

Calcula o valor de hash de uma chave especificada.

UINT HashKey(LPCTSTR key) const;

Parâmetros

key
A chave cujo valor de hash deve ser calculado.

Valor de retorno

O valor de hash da chave

Observações

A tabela a seguir mostra outras funções de membro semelhantes ao CMapStringToOb::HashKey.

Classe Função de Membro
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 a tabela de hash.

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

Parâmetros

hashSize
Número de entradas na tabela de hash.

bAllocNow
Se TRUE, aloca a tabela de hash na inicialização, caso contrário, a tabela é alocada quando necessário.

Observações

Para obter o melhor desempenho, o tamanho da tabela de hash deve ser um número primo. Para minimizar as colisões, o tamanho deve ser cerca de 20% maior do que o maior conjunto de dados previsto.

A tabela a seguir mostra outras funções de membro semelhantes ao CMapStringToOb::InitHashTable.

Classe Função de Membro
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 se o mapa está vazio.

BOOL IsEmpty() const;

Valor de retorno

Diferente de zero se este mapa não contiver elementos; caso contrário, 0.

Exemplo

Veja o exemplo para RemoveAll.

Observações

A tabela a seguir mostra outras funções de membro semelhantes ao CMapStringToOb:: IsEmpty.

Classe Função de Membro
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

Retorna um CObject ponteiro com base em um CString valor.

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

Parâmetros

key
Especifica a chave de cadeia de caracteres que identifica o elemento a ser pesquisado.

rValue
Especifica o valor retornado do elemento pesquisado.

Valor de retorno

Diferente de zero se o elemento foi encontrado; caso contrário, 0.

Observações

Lookup usa um algoritmo de hash para localizar rapidamente o elemento map com uma chave que corresponde exatamente (CString value).

A tabela a seguir mostra outras funções de membro semelhantes ao CMapStringToOb::LookUp.

Classe Função de Membro
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;

Exemplo

Consulte CObList::CObList para obter uma lista da CAge classe usada em todos os exemplos de coleção.

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

Retorna uma referência à chave associada ao valor de chave especificado.

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

Parâmetros

key
Especifica a chave de cadeia de caracteres que identifica o elemento a ser pesquisado.

rKey
A referência à chave associada.

Valor de retorno

Diferente de zero se a chave foi encontrada; caso contrário, 0.

Observações

Usar uma referência a uma chave não é seguro se usado depois que o elemento associado foi removido do mapa ou depois que o mapa foi destruído.

A tabela a seguir mostra outras funções de membro semelhantes ao CMapStringToOb:: LookupKey.

Classe Função de Membro
CMapStringToPtr BOOL LookupKey( LPCTSTR key , LPCTSTR& rKey ) const;
CMapStringToString BOOL LookupKey( LPCTSTR key , LPCTSTR& rKey ) const;

CMapStringToOb::operator [ ]

Um substituto conveniente para a SetAt função de membro.

CObject*& operator[ ](lpctstr key);

Valor de retorno

Uma referência a um ponteiro para um CObject objeto, ou NULL se o mapa está vazio ou key fora do intervalo.

Observações

Assim, ele só pode ser usado no lado esquerdo de uma declaração de atribuição (an l-value). Se não houver nenhum elemento map com a chave especificada, um novo elemento será criado.

Não há "lado direito" (r-value) equivalente a este operador porque existe a possibilidade de uma chave não ser encontrada no mapa. Use a função de membro para recuperação de Lookup elementos.

A tabela a seguir mostra outras funções de membro semelhantes ao CMapStringToOb::operator [].

Classe Função de Membro
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 );

Exemplo

Consulte CObList::CObList para obter uma lista da CAge classe usada em todos os exemplos de coleção.

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

Os resultados deste programa são os seguintes:

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

CMapStringToOb::RemoveAll

Remove todos os elementos deste mapa e destrói os CString objetos chave.

void RemoveAll();

Observações

Os CObject objetos referenciados por cada chave não são destruídos. A RemoveAll função pode causar vazamentos de memória se você não garantir que os objetos referenciados CObject sejam destruídos.

A função funciona corretamente se o mapa já estiver vazio.

A tabela a seguir mostra outras funções de membro semelhantes ao CMapStringToOb::RemoveAll.

Classe Função de Membro
CMapPtrToPtr void RemoveAll();
CMapPtrToWord void RemoveAll();
CMapStringToPtr void RemoveAll();
CMapStringToString void RemoveAll();
CMapWordToOb void RemoveAll();
CMapWordToPtr void RemoveAll();

Exemplo

Consulte CObList::CObList para obter uma lista da CAge classe usada em todos os exemplos de coleção.

{
   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

Procura a entrada do mapa correspondente à chave fornecida; Em seguida, se a chave for encontrada, remove a entrada.

BOOL RemoveKey(LPCTSTR key);

Parâmetros

key
Especifica a cadeia de caracteres usada para pesquisa de mapa.

Valor de retorno

Diferente de zero se a entrada foi encontrada e removida com êxito; caso contrário, 0.

Observações

Isso pode causar vazamentos de memória se o objeto não for excluído CObject em outro lugar.

A tabela a seguir mostra outras funções de membro semelhantes ao CMapStringToOb::RemoveKey.

Classe Função de Membro
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 );

Exemplo

Consulte CObList::CObList para obter uma lista da CAge classe usada em todos os exemplos de coleção.

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

Os resultados deste programa são os seguintes:

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

O principal significa inserir um elemento em um mapa.

void SetAt(
    LPCTSTR key,
    CObject* newValue);

Parâmetros

key
Especifica a cadeia de caracteres que é a chave do novo elemento.

newValue
Especifica o CObject ponteiro que é o valor do novo elemento.

Observações

Primeiro, a chave é procurada. Se a chave for encontrada, o valor correspondente será alterado; caso contrário, um novo elemento chave-valor será criado.

A tabela a seguir mostra outras funções de membro semelhantes ao CMapStringToOb::SetAt.

Classe Função de Membro
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 );

Exemplo

Consulte CObList::CObList para obter uma lista da CAge classe usada em todos os exemplos de coleção.

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

Os resultados deste programa são os seguintes:

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

Ver também

CObject Classe
Gráfico de Hierarquia
CMapPtrToPtr Classe
CMapPtrToWord Classe
CMapStringToPtr Classe
CMapStringToString Classe
CMapWordToOb Classe
CMapWordToPtr Classe