CMapStringToOb-klass

En ordlistesamlingsklass som mappar unika CString objekt till CObject pekare.

Syntax

class CMapStringToOb : public CObject

Medlemmar

Offentliga konstruktorer

Namn Beskrivning
CMapStringToOb::CMapStringToOb Konstruktor.

Offentliga metoder

Namn Beskrivning
CMapStringToOb::GetCount Returnerar antalet element i den här kartan.
CMapStringToOb::GetHashTableSize Avgör det aktuella antalet element i hash-tabellen.
CMapStringToOb::GetNextAssoc Hämtar nästa element för iterering.
CMapStringToOb::GetSize Returnerar antalet element i den här kartan.
CMapStringToOb::GetStartPosition Returnerar positionen för det första elementet.
CMapStringToOb::HashKey Beräknar hash-värdet för en angiven nyckel.
CMapStringToOb::InitHashTable Initierar hash-tabellen.
CMapStringToOb::IsEmpty Tester för villkoret tom mappning (inga element).
CMapStringToOb::Lookup Söker upp en tomrumspekare baserat på tomrumspekarnyckeln. Pekarvärdet, inte den entitet som det pekar på, används för nyckeljämförelsen.
CMapStringToOb::LookupKey Returnerar en referens till nyckeln som är associerad med det angivna nyckelvärdet.
CMapStringToOb::RemoveAll Tar bort alla element från den här kartan.
CMapStringToOb::RemoveKey Tar bort ett element som anges av en nyckel.
CMapStringToOb::SetAt Infogar ett element i kartan. ersätter ett befintligt element om en matchande nyckel hittas.

Offentliga operatörer

Namn Beskrivning
CMapStringToOb::operator [ ] Infogar ett element i kartan – operatorersättning för SetAt.

Anmärkningar

När du har infogat ett CString- CObject* par (element) i kartan kan du effektivt hämta eller ta bort paret med hjälp av en sträng eller ett CString värde som en nyckel. Du kan också iterera över alla element på kartan.

En variabel av typen POSITION används för alternativ poståtkomst i alla kartvariationer. Du kan använda en POSITION för att "komma ihåg" en post och iterera via kartan. Du kanske tror att den här iterationen är sekventiell efter nyckelvärde. Det är det inte. Sekvensen av hämtade element är obestämd.

CMapStringToOb innehåller makrot IMPLEMENT_SERIAL för att stödja serialisering och dumpning av dess element. Varje element serialiseras i tur och ordning om en karta lagras i ett arkiv, antingen med operatorn overloaded insertion ( <<) eller med Serialize medlemsfunktionen.

Om du behöver en diagnostikdump av de enskilda elementen på kartan ( CString värdet och CObject innehållet) måste du ange djupet i dumpkontexten till 1 eller större.

När ett CMapStringToOb objekt tas bort eller när dess element tas bort tas objekten CString och pekarna CObject bort. Objekten som pekarna refererar till CObject förstörs inte.

Kartklasshärledning liknar listhärledning. Se artikeln Samlingar för en illustration av härledning av en speciallistklass.

Arvshierarki

CObject

CMapStringToOb

Kravspecifikation

rubrik:afxcoll.h

CMapStringToOb::CMapStringToOb

Konstruerar en tom CString-to-map CObject* .

CMapStringToOb(INT_PTR nBlockSize = 10);

Parameterar

nBlockSize
Anger minnesallokeringskornigheten för att utöka kartan.

Anmärkningar

När kartan växer allokeras minne i enheter med nBlockSize poster.

I följande tabell visas andra medlemsfunktioner som liknar CMapStringToOb:: CMapStringToOb.

Klass Medlemsfunktion
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 );

Exempel

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

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

Se CObList::CObList en lista över klassen CAge som används i alla samlingsexempel.

CMapStringToOb::GetCount

Avgör hur många element som finns på kartan.

INT_PTR GetCount() const;

Returvärde

Antalet element i den här kartan.

Anmärkningar

I följande tabell visas andra medlemsfunktioner som liknar CMapStringToOb::GetCount.

Klass Medlemsfunktion
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;

Exempel

Se CObList::CObList en lista över klassen CAge som används i alla samlingsexempel.

CMapStringToOb map;

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

CMapStringToOb::GetHashTableSize

Avgör det aktuella antalet element i hash-tabellen.

UINT GetHashTableSize() const;

Returvärde

Returnerar antalet element i hash-tabellen.

Anmärkningar

I följande tabell visas andra medlemsfunktioner som liknar CMapStringToOb::GetHashTableSize.

Klass Medlemsfunktion
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

Hämtar kartelementet på rNextPositionoch uppdaterar rNextPosition sedan för att referera till nästa element på kartan.

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

Parameterar

rNextPosition
Anger en referens till ett POSITION-värde som returnerades av ett tidigare GetNextAssoc eller GetStartPosition anrop.

rKey
Anger den returnerade nyckeln för det hämtade elementet (en sträng).

rValue
Anger det returnerade värdet för det hämtade elementet (en CObject pekare). Mer information om den här parametern finns i Kommentarer .

Anmärkningar

Den här funktionen är mest användbar för iterering genom alla element på kartan. Observera att positionssekvensen inte nödvändigtvis är samma som nyckelvärdesekvensen.

Om det hämtade elementet är det sista i kartan är det nya värdet rNextPosition för inställt på NULL.

För parametern rValue ska du se till att omvandla objekttypen till CObject*&, vilket är vad kompilatorn kräver, som du ser i följande exempel:

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

Detta gäller GetNextAssoc inte för kartor baserade på mallar.

I följande tabell visas andra medlemsfunktioner som liknar CMapStringToOb::GetNextAssoc.

Klass Medlemsfunktion
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;

Exempel

Se CObList::CObList en lista över klassen CAge som används i alla samlingsexempel.

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
}

Resultatet från det här programmet är följande:

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

Returnerar antalet kartelement.

INT_PTR GetSize() const;

Returvärde

Antalet objekt på kartan.

Anmärkningar

Anropa den här metoden för att hämta antalet element på kartan.

I följande tabell visas andra medlemsfunktioner som liknar CMapStringToOb::GetSize.

Klass Medlemsfunktion
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;

Exempel

CMapStringToOb map;

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

CMapStringToOb::GetStartPosition

Startar en map-iteration genom att returnera ett POSITION värde som kan skickas till ett GetNextAssoc anrop.

POSITION GetStartPosition() const;

Returvärde

Ett POSITION värde som anger en startposition för iterering av kartan, eller NULL om kartan är tom.

Anmärkningar

Iterationssekvensen är inte förutsägbar. Därför har det "första elementet på kartan" ingen särskild betydelse.

I följande tabell visas andra medlemsfunktioner som liknar CMapStringToOb::GetStartPosition.

Klass Medlemsfunktion
CMapPtrToPtr POSITION GetStartPosition() const;
CMapPtrToWord POSITION GetStartPosition() const;
CMapStringToPtr POSITION GetStartPosition() const;
CMapStringToString POSITION GetStartPosition() const;
CMapWordToOb POSITION GetStartPosition() const;
CMapWordToPtr POSITION GetStartPosition() const;

Exempel

Se exemplet för CMapStringToOb::GetNextAssoc.

CMapStringToOb::HashKey

Beräknar hash-värdet för en angiven nyckel.

UINT HashKey(LPCTSTR key) const;

Parameterar

key
Nyckeln vars hashvärde ska beräknas.

Returvärde

Nyckelns hashvärde

Anmärkningar

I följande tabell visas andra medlemsfunktioner som liknar CMapStringToOb::HashKey.

Klass Medlemsfunktion
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

Initierar hash-tabellen.

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

Parameterar

hashSize
Antal poster i hash-tabellen.

bAllocNow
Om TRUE, allokerar hash-tabellen vid initiering, annars allokeras tabellen när det behövs.

Anmärkningar

För bästa prestanda bör hashtabellens storlek vara ett primärt tal. För att minimera kollisioner bör storleken vara ungefär 20 procent större än den största förväntade datamängden.

I följande tabell visas andra medlemsfunktioner som liknar CMapStringToOb::InitHashTable.

Klass Medlemsfunktion
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

Avgör om kartan är tom.

BOOL IsEmpty() const;

Returvärde

Nonzero om den här kartan inte innehåller några element; annars 0.

Exempel

Se exemplet för RemoveAll.

Anmärkningar

I följande tabell visas andra medlemsfunktioner som liknar CMapStringToOb:: IsEmpty.

Klass Medlemsfunktion
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

Returnerar en CObject pekare baserat på ett CString värde.

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

Parameterar

key
Anger strängnyckeln som identifierar elementet som ska letas upp.

rValue
Anger det returnerade värdet från uppslagselementet.

Returvärde

Nonzero om elementet hittades; annars 0.

Anmärkningar

Lookup använder en hashalgoritm för att snabbt hitta kartelementet med en nyckel som matchar exakt (CString värde).

I följande tabell visas andra medlemsfunktioner som liknar CMapStringToOb::LookUp.

Klass Medlemsfunktion
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;

Exempel

Se CObList::CObList en lista över klassen CAge som används i alla samlingsexempel.

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

Returnerar en referens till nyckeln som är associerad med det angivna nyckelvärdet.

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

Parameterar

key
Anger strängnyckeln som identifierar elementet som ska letas upp.

rKey
Referensen till den associerade nyckeln.

Returvärde

Nonzero om nyckeln hittades; annars 0.

Anmärkningar

Att använda en referens till en nyckel är osäkert om det används efter att det associerade elementet har tagits bort från kartan eller efter att kartan förstördes.

I följande tabell visas andra medlemsfunktioner som liknar CMapStringToOb:: LookupKey.

Klass Medlemsfunktion
CMapStringToPtr BOOL LookupKey( LPCTSTR key , LPCTSTR& rKey ) const;
CMapStringToString BOOL LookupKey( LPCTSTR key , LPCTSTR& rKey ) const;

CMapStringToOb::operator [ ]

En praktisk ersättning för SetAt medlemsfunktionen.

CObject*& operator[ ](lpctstr key);

Returvärde

En referens till en pekare till ett CObject objekt, eller NULL om kartan är tom eller key ligger utom räckhåll.

Anmärkningar

Därför kan den endast användas till vänster i en tilldelningssats (en l-value). Om det inte finns något kartelement med den angivna nyckeln skapas ett nytt element.

Det finns ingen "höger sida" (r-value) som motsvarar den här operatorn eftersom det finns en möjlighet att en nyckel kanske inte hittas på kartan. Lookup Använd medlemsfunktionen för elementhämtning.

I följande tabell visas andra medlemsfunktioner som liknar CMapStringToOb::operator [].

Klass Medlemsfunktion
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 );

Exempel

Se CObList::CObList en lista över klassen CAge som används i alla samlingsexempel.

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

Resultatet från det här programmet är följande:

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

CMapStringToOb::RemoveAll

Tar bort alla element från den här kartan och förstör nyckelobjekten CString .

void RemoveAll();

Anmärkningar

Objekten CObject som refereras av varje nyckel förstörs inte. Funktionen RemoveAll kan orsaka minnesläckor om du inte ser till att de refererade CObject objekten förstörs.

Funktionen fungerar korrekt om kartan redan är tom.

I följande tabell visas andra medlemsfunktioner som liknar CMapStringToOb::RemoveAll.

Klass Medlemsfunktion
CMapPtrToPtr void RemoveAll();
CMapPtrToWord void RemoveAll();
CMapStringToPtr void RemoveAll();
CMapStringToString void RemoveAll();
CMapWordToOb void RemoveAll();
CMapWordToPtr void RemoveAll();

Exempel

Se CObList::CObList en lista över klassen CAge som används i alla samlingsexempel.

{
   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

Söker upp kartposten som motsvarar den angivna nyckeln. sedan, om nyckeln hittas, tar bort posten.

BOOL RemoveKey(LPCTSTR key);

Parameterar

key
Anger strängen som används för kartsökning.

Returvärde

Nonzero om posten hittades och togs bort. annars 0.

Anmärkningar

Detta kan orsaka minnesläckor om objektet CObject inte tas bort någon annanstans.

I följande tabell visas andra medlemsfunktioner som liknar CMapStringToOb::RemoveKey.

Klass Medlemsfunktion
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 );

Exempel

Se CObList::CObList en lista över klassen CAge som används i alla samlingsexempel.

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

Resultatet från det här programmet är följande:

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

Det primära innebär att infoga ett element i en karta.

void SetAt(
    LPCTSTR key,
    CObject* newValue);

Parameterar

key
Anger strängen som är nyckeln för det nya elementet.

newValue
Anger den CObject pekare som är värdet för det nya elementet.

Anmärkningar

Först letas nyckeln upp. Om nyckeln hittas ändras motsvarande värde. annars skapas ett nytt nyckel/värde-element.

I följande tabell visas andra medlemsfunktioner som liknar CMapStringToOb::SetAt.

Klass Medlemsfunktion
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 );

Exempel

Se CObList::CObList en lista över klassen CAge som används i alla samlingsexempel.

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

Resultatet från det här programmet är följande:

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

Se även

CObject klass
hierarkidiagram
CMapPtrToPtr klass
CMapPtrToWord klass
CMapStringToPtr klass
CMapStringToString klass
CMapWordToOb klass
CMapWordToPtr klass