Compartilhar via


Classe CMapStringToOb

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

Sintaxe

class CMapStringToOb : public CObject

Membros

Construtores públicos

Nome Descrição
CMapStringToOb::CMapStringToOb Construtor.

Métodos públicos

Nome Descrição
CMapStringToOb::GetCount Retorna o número de elementos no 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 Retorna o número de elementos no mapa.
CMapStringToOb::GetStartPosition Retorna 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 Testa a condição de mapa vazio (sem elementos).
CMapStringToOb::Lookup Procura um ponteiro nulo com base na tecla de ponteiro nulo. O valor do ponteiro, não a entidade para a qual ele 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 desse mapa.
CMapStringToOb::RemoveKey Remove um elemento especificado por uma chave.
CMapStringToOb::SetAt Insere um elemento no mapa; substituirá um elemento 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.

Comentários

Depois de inserir um par CString- CObject* (elemento) no mapa, você pode recuperar ou excluir com eficiência o par usando uma cadeia de caracteres ou um valor CString como chave. Você também pode iterar por 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 por meio do mapa. Você pode pensar que essa iteração é sequencial por valor de chave; ela não é. A sequência de elementos recuperados é indeterminada.

A CMapStringToOb incorpora a macro IMPLEMENT_SERIAL para suportar serialização e despejo de seus elementos. Se um mapa for armazenado em um arquivo, seja com o operador de inserção (<<) sobrecarregado ou com a função de membro Serialize, cada elemento será serializado por vez.

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

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

A derivação de classe de mapa é semelhante à derivação de lista. Confira o artigo Coleções para uma ilustração da derivação de uma classe de lista de finalidade especial.

Hierarquia de herança

CObject

CMapStringToOb

Requisitos

Cabeçalho: afxcoll.h

CMapStringToOb::CMapStringToOb

Constrói um mapa CString a CObject* vazio.

CMapStringToOb(INT_PTR nBlockSize = 10);

Parâmetros

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

Comentários

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

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

Classe Função 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 listagem da classe CAge 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 no mapa.

Comentários

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

Classe Função 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 listagem da classe CAge 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.

Comentários

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

Classe Função 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 rNextPosition, em seguida, atualiza rNextPosition para se referir 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 GetNextAssoc ou GetStartPosition anterior.

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

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

Comentários

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

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

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

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

Isso não vale para GetNextAssoc em mapas com base em modelos.

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

Classe Função 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 listagem da classe CAge 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.

Comentários

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

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

Classe Função 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 valor POSITION que pode ser passado para uma chamada GetNextAssoc.

POSITION GetStartPosition() const;

Valor de retorno

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

Comentários

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 a CMapStringToOb::GetStartPosition.

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

Confira o exemplo de 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

Comentários

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

Classe Função 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
O número de entradas na tabela de hash.

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

Comentários

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

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

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

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

Exemplo

Confira o exemplo de RemoveAll.

Comentários

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

Classe Função 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 ponteiro CObject com base em um valor CString.

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

Não zero se o elemento foi encontrado; caso contrário, 0.

Comentários

Lookup usa um algoritmo de hash para localizar rapidamente o elemento de mapa com uma chave que corresponde exatamente a ele (valor CString).

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

Classe Função 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 listagem da classe CAge 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

Não zero se a chave foi encontrada; caso contrário, 0.

Comentários

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 a CMapStringToOb:: LookupKey.

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

CMapStringToOb::operator [ ]

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

CObject*& operator[ ](lpctstr key);

Valor de retorno

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

Comentários

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

Não há nenhum equivalente "lado direito" (r-value) a esse operador porque há a possibilidade de que uma chave não seja encontrada no mapa. Use a função de membro Lookup para recuperação de elemento.

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

Classe Função 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 listagem da classe CAge 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 objetos-chave CString.

void RemoveAll();

Comentários

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

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

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

Classe Função 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 listagem da classe CAge 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

Pesquisa a entrada do mapa correspondente à chave fornecida; em seguida, se a chave for encontrada, removerá a entrada.

BOOL RemoveKey(LPCTSTR key);

Parâmetros

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

Valor de retorno

Não zero se a entrada foi encontrada e removida com êxito; caso contrário, 0.

Comentários

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

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

Classe Função 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 listagem da classe CAge 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

A primária 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 ponteiro CObject que é o valor do novo elemento.

Comentários

Primeiro, a chave é pesquisada. 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 a CMapStringToOb::SetAt.

Classe Função 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 listagem da classe CAge 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

Confira também

Classe CObject
Gráfico da hierarquia
Classe CMapPtrToPtr
Classe CMapPtrToWord
Classe CMapStringToPtr
Classe CMapStringToString
Classe CMapWordToOb
Classe CMapWordToPtr