Share via


CMap-klasse

Opmerking

De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Een verzamelingsklasse voor woordenlijst waarmee unieke sleutels aan waarden worden toegewezen.

Syntaxis

template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>class CMap : public CObject

Parameterwaarden

KEY
Klasse van het object dat wordt gebruikt als sleutel voor de kaart.

ARG_KEY
Gegevenstype dat wordt gebruikt voor KEY argumenten; meestal een verwijzing naar KEY.

VALUE
Klasse van het object dat is opgeslagen in de kaart.

ARG_VALUE
Gegevenstype dat wordt gebruikt voor VALUE argumenten; meestal een verwijzing naar VALUE.

Leden

Openbare structuren

Naam Description
CMap::CPair Een geneste structuur met een sleutelwaarde en de waarde van het bijbehorende object.

Openbare constructors

Naam Description
CMap::CMap Hiermee wordt een verzameling samengesteld waarmee sleutels worden toegewezen aan waarden.

Openbare methoden

Naam Description
CMap::GetCount Retourneert het aantal elementen in deze kaart.
CMap::GetHashTableSize Retourneert het aantal elementen in de hash-tabel.
CMap::GetNextAssoc Hiermee haalt u het volgende element op voor het herhalen.
CMap::GetSize Retourneert het aantal elementen in deze kaart.
CMap::GetStartPosition Retourneert de positie van het eerste element.
CMap::InitHashTable Initialiseert de hash-tabel en geeft de grootte op.
CMap::IsEmpty Hiermee wordt getest op de voorwaarde empty-map (geen elementen).
CMap::Lookup Hiermee wordt de waarde opgezoekt die is toegewezen aan een bepaalde sleutel.
CMap::PGetFirstAssoc Retourneert een aanwijzer naar het eerste element.
CMap::PGetNextAssoc Hiermee wordt een aanwijzer naar het volgende element voor het herhalen van de muisaanwijzer weergegeven.
CMap::PLookup Retourneert een aanwijzer naar een sleutel waarvan de waarde overeenkomt met de opgegeven waarde.
CMap::RemoveAll Hiermee verwijdert u alle elementen uit deze kaart.
CMap::RemoveKey Hiermee verwijdert u een element dat is opgegeven door een sleutel.
CMap::SetAt Hiermee voegt u een element in de kaart in; vervangt een bestaand element als er een overeenkomende sleutel wordt gevonden.

Openbare operators

Naam Description
CMap::operator [ ] Hiermee voegt u een element in de kaart in: operatorvervanging voor SetAt.

Opmerkingen

Zodra u een sleutel-waardepaar (element) hebt ingevoegd in de kaart, kunt u het paar efficiënt ophalen of verwijderen met behulp van de sleutel om er toegang toe te krijgen. U kunt ook alle elementen in de kaart herhalen.

Er wordt een variabele van het type POSITION gebruikt voor alternatieve toegang tot vermeldingen. U kunt een POSITION item 'onthouden' en de kaart herhalen. U denkt misschien dat deze iteratie sequentieel is op basis van sleutelwaarde; Dat is het niet. De volgorde van opgehaalde elementen is onbepaald.

Bepaalde lidfuncties van deze klasse roepen globale helperfuncties aan die moeten worden aangepast voor de meeste toepassingen van de CMap klasse. Zie Helpers voor verzamelingsklassen in de sectie Macro's en Globals van de MFC-verwijzing.

CMap onderdrukkingen CObject::Serialize ter ondersteuning van serialisatie en dumping van de elementen. Als een kaart wordt opgeslagen in een archief met behulp van Serialize, wordt elk kaartelement op zijn beurt geserialiseerd. De standaard implementatie van de SerializeElements helperfunctie voert een bitsgewijze schrijfbewerking uit. Zie How to: Make a Type-Safe Collection voor informatie over serialisatie van items die zijn afgeleid van CObject of andere door de gebruiker gedefinieerde typen.

Als u een diagnostische dump van de afzonderlijke elementen in de kaart nodig hebt (de sleutels en waarden), moet u de diepte van de dumpcontext instellen op 1 of hoger.

Wanneer een CMap object wordt verwijderd of wanneer de elementen ervan worden verwijderd, worden de sleutels en waarden beide verwijderd.

De afleiding van de kaartklasse is vergelijkbaar met lijstdeivatie. Zie het artikel Verzamelingen voor een illustratie van de afleiding van een lijstklasse voor speciale doeleinden.

Overnamehiërarchie

CObject

CMap

Requirements

Rubriek:afxtempl.h

CMap::CMap

Maakt een lege kaart.

CMap(INT_PTR nBlockSize = 10);

Parameterwaarden

nBlockSize
Hiermee geeft u de granulariteit voor geheugentoewijzing op voor het uitbreiden van de kaart.

Opmerkingen

Naarmate de kaart groeit, wordt geheugen toegewezen in eenheden van nBlockSize vermeldingen.

Example

// declares a map of ints to points
CMap<int, int, CPoint, CPoint> myMap(16);

CMap::CPair

Bevat een sleutelwaarde en de waarde van het bijbehorende object.

Opmerkingen

Dit is een geneste structuur binnen de klasse CMap.

De structuur bestaat uit twee velden:

  • key De werkelijke waarde van het sleuteltype.

  • value De waarde van het gekoppelde object.

Het wordt gebruikt voor het opslaan van de retourwaarden van CMap::PLookup, CMap::PGetFirstAssocen CMap::PGetNextAssoc.

Example

Zie het voorbeeld voor CMap::PLookupeen voorbeeld van gebruik.

CMap::GetCount

Hiermee haalt u het aantal elementen op de kaart op.

INT_PTR GetCount() const;

Retourwaarde

Het aantal elementen.

Example

Zie het voorbeeld voor CMap::Lookup.

CMap::GetHashTableSize

Bepaalt het aantal elementen in de hash-tabel voor de kaart.

UINT GetHashTableSize() const;

Retourwaarde

Het aantal elementen in de hash-tabel.

Example

CMap<int, int, CPoint, CPoint> myMap;

UINT uTableSize = myMap.GetHashTableSize();

CMap::GetNextAssoc

Haalt het kaartelement op rNextPositionen werkt vervolgens rNextPosition bij om te verwijzen naar het volgende element in de kaart.

void GetNextAssoc(
    POSITION& rNextPosition,
    KEY& rKey,
    VALUE& rValue) const;

Parameterwaarden

rNextPosition
Hiermee geeft u een verwijzing naar een POSITION waarde die wordt geretourneerd door een vorige GetNextAssoc of GetStartPosition aanroep.

KEY
Sjabloonparameter die het type van de sleutel van de kaart opgeeft.

rKey
Hiermee geeft u de geretourneerde sleutel van het opgehaalde element.

VALUE
Sjabloonparameter die het type van de waarde van de kaart opgeeft.

rValue
Hiermee geeft u de geretourneerde waarde van het opgehaalde element.

Opmerkingen

Deze functie is het handigst voor het herhalen van alle elementen in de kaart. Houd er rekening mee dat de positiereeks niet noodzakelijkerwijs hetzelfde is als de sleutelwaardereeks.

Als het opgehaalde element de laatste in de kaart is, wordt de nieuwe waarde rNextPosition ingesteld op NULL.

Example

Zie het voorbeeld voor CMap::SetAt.

CMap::GetSize

Retourneert het aantal kaartelementen.

INT_PTR GetSize() const;

Retourwaarde

Het aantal items in de kaart.

Opmerkingen

Roep deze methode aan om het aantal elementen in de kaart op te halen.

Example

CMap<int, int, CPoint, CPoint> myMap;

myMap.InitHashTable(257);

// Add 200 elements to the map.
for (int i = 0; i < 200; i++)
{
   myMap[i] = CPoint(i, i);
}

// Remove the elements with even key values.
CPoint pt;
for (int i = 0; myMap.Lookup(i, pt); i += 2)
{
   myMap.RemoveKey(i);
}

ASSERT(myMap.GetSize() == 100);
TRACE(_T("myMap with %d elements:\n"), myMap.GetCount());
POSITION pos = myMap.GetStartPosition();
int iKey;
CPoint ptVal;
while (pos != NULL)
{
   myMap.GetNextAssoc(pos, iKey, ptVal);
   TRACE(_T("\t[%d] = (%d,%d)\n"), iKey, ptVal.x, ptVal.y);
}

CMap::GetStartPosition

Hiermee start u een toewijzingsiteratie door een POSITION waarde te retourneren die kan worden doorgegeven aan een GetNextAssoc aanroep.

POSITION GetStartPosition() const;

Retourwaarde

Een POSITION waarde die een beginpositie aangeeft voor het herhalen van de kaart of NULL als de kaart leeg is.

Opmerkingen

De herhalingsvolgorde is niet voorspelbaar; daarom heeft het "eerste element in de kaart" geen speciale betekenis.

Example

Zie het voorbeeld voor CMap::SetAt.

CMap::InitHashTable

Initialiseert de hash-tabel.

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

Parameterwaarden

hashSize
Aantal vermeldingen in de hash-tabel.

bAllocNow
Als TRUE, wijst u de hash-tabel toe bij de initialisatie; anders wordt de tabel wanneer nodig toegewezen.

Opmerkingen

Voor de beste prestaties moet de grootte van de hashtabel een priemnummer zijn. Om conflicten te minimaliseren, moet de grootte ongeveer 20 procent groter zijn dan de grootste verwachte gegevensset.

Example

Zie het voorbeeld voor CMap::Lookup.

CMap::IsEmpty

Bepaalt of de kaart leeg is.

BOOL IsEmpty() const;

Retourwaarde

Niet-nul als deze kaart geen elementen bevat; anders 0.

Example

Zie het voorbeeld voor CMap::RemoveAll.

CMap::Lookup

Hiermee wordt de waarde opgezoekt die is toegewezen aan een bepaalde sleutel.

BOOL Lookup(ARG_KEY key, VALUE& rValue) const;

Parameterwaarden

ARG_KEY
Sjabloonparameter die het type van de key waarde opgeeft.

key
Hiermee geeft u de sleutel op waarmee het element wordt geïdentificeerd dat moet worden opgezoekd.

VALUE
Hiermee geeft u het type van de waarde die moet worden opgezoekd.

rValue
Hiermee ontvangt u de opzoekwaarde.

Retourwaarde

Niet-nul als het element is gevonden; anders 0.

Opmerkingen

Lookup gebruikt een hash-algoritme om snel het kaartelement te vinden met een sleutel die exact overeenkomt met de opgegeven sleutel.

Example

CMap<int, int, CPoint, CPoint> myMap;

myMap.InitHashTable(257);

// Add 200 elements to the map.
for (int i = 0; i < 200; i++)
{
   myMap[i] = CPoint(i, i);
}

// Remove the elements with even key values.
CPoint pt;
for (int i = 0; myMap.Lookup(i, pt); i += 2)
{
   myMap.RemoveKey(i);
}

ASSERT(myMap.GetSize() == 100);
TRACE(_T("myMap with %d elements:\n"), myMap.GetCount());
POSITION pos = myMap.GetStartPosition();
int iKey;
CPoint ptVal;
while (pos != NULL)
{
   myMap.GetNextAssoc(pos, iKey, ptVal);
   TRACE(_T("\t[%d] = (%d,%d)\n"), iKey, ptVal.x, ptVal.y);
}

CMap::operator [ ]

Een handige vervanging voor de SetAt lidfunctie.

VALUE& operator[](arg_key key);

Parameterwaarden

VALUE
Sjabloonparameter die het type kaartwaarde opgeeft.

ARG_KEY
Sjabloonparameter die het type sleutelwaarde opgeeft.

key
De sleutel die wordt gebruikt om de waarde op te halen uit de kaart.

Opmerkingen

Het kan dus alleen aan de linkerkant van een toewijzingsinstructie (een l-waarde) worden gebruikt. Als er geen kaartelement met de opgegeven sleutel is, wordt er een nieuw element gemaakt.

Er is geen 'rechterkant' (r-waarde) die gelijk is aan deze operator omdat er een mogelijkheid is dat een sleutel niet in de kaart kan worden gevonden. Gebruik de Lookup lidfunctie voor het ophalen van elementen.

Example

Zie het voorbeeld voor CMap::Lookup.

CMap::PGetFirstAssoc

Retourneert de eerste vermelding van het kaartobject.

const CPair* PGetFirstAssoc() const;
CPair* PGetFirstAssoc();

Retourwaarde

Een aanwijzer naar de eerste vermelding op de kaart; zie CMap::CPair. Als de kaart geen vermeldingen bevat, is NULLde waarde .

Opmerkingen

Roep deze functie aan om een aanwijzer te retourneren naar het eerste element in het kaartobject.

Example

typedef CMap<int, int, CPoint, CPoint> CMyMap;
CMyMap myMap;

myMap.InitHashTable(257);

// Add 10 elements to the map.
for (int i = 0; i <= 10; i++)
   myMap.SetAt(i, CPoint(i, i));

// Print the element value with even key values.
int nKey = 0;
CPoint pt;
CMyMap::CPair *pCurVal;

pCurVal = myMap.PGetFirstAssoc();
while (pCurVal != NULL)
{
   if ((nKey % 2) == 0)
   {
      _tprintf_s(_T("Current key value at %d: %d,%d\n"),
                 pCurVal->key, pCurVal->value.x, pCurVal->value.y);
   }
   pCurVal = myMap.PGetNextAssoc(pCurVal);
   nKey++;
}

CMap::PGetNextAssoc

Hiermee wordt het kaartelement opgehaald dat wordt verwezen door pAssocRec.

const CPair *PGetNextAssoc(const CPair* pAssocRet) const;

CPair *PGetNextAssoc(const CPair* pAssocRet);

Parameterwaarden

pAssocRet
Verwijst naar een kaartvermelding die wordt geretourneerd door een vorige PGetNextAssoc of CMap::PGetFirstAssoc oproep.

Retourwaarde

Een aanwijzer naar de volgende vermelding op de kaart; zie CMap::CPair. Als het element de laatste in de kaart is, is NULLde waarde .

Opmerkingen

Roep deze methode aan om alle elementen in de kaart te doorlopen. Haal het eerste element op met een aanroep naar PGetFirstAssoc en herhaal vervolgens de kaart met opeenvolgende aanroepen naar PGetNextAssoc.

Example

Zie het voorbeeld voor CMap::PGetFirstAssoc.

CMap::PLookup

Hiermee wordt de waarde gevonden die is toegewezen aan een bepaalde sleutel.

const CPair* PLookup(ARG_KEY key) const;
CPair* PLookup(ARG_KEY key);

Parameterwaarden

key
Sleutel voor het element dat moet worden gezocht.

Retourwaarde

Een aanwijzer naar een sleutelstructuur; zie CMap::CPair. Als er geen overeenkomst wordt gevonden, CMap::PLookup wordt deze geretourneerd NULL.

Opmerkingen

Roep deze methode aan om te zoeken naar een kaartelement met een sleutel die exact overeenkomt met de opgegeven sleutel.

Example

typedef CMap<int, int, CPoint, CPoint> CMyMap;
CMyMap myMap;

myMap.InitHashTable(257);

// Add 10 elements to the map.
for (int i = 0; i <= 10; i++)
   myMap[i] = CPoint(i, i);

// Print the element values with even key values.
CMyMap::CPair *pCurVal;

for (int i = 0; i <= myMap.GetCount(); i += 2)
{
   pCurVal = myMap.PLookup(i);
   _tprintf_s(_T("Current key value at %d: %d,%d\n"),
              pCurVal->key, pCurVal->value.x, pCurVal->value.y);
}

CMap::RemoveAll

Hiermee verwijdert u alle waarden uit deze kaart door de globale helperfunctie DestructElementsaan te roepen.

void RemoveAll();

Opmerkingen

De functie werkt correct als de kaart al leeg is.

Example

CMap<int, int, CPoint, CPoint> myMap;

// Add 10 elements to the map.
for (int i = 0; i < 10; i++)
   myMap.SetAt(i, CPoint(i, i));

myMap.RemoveAll();

ASSERT(myMap.IsEmpty());

CMap::RemoveKey

Hiermee wordt de kaartvermelding opgezoekd die overeenkomt met de opgegeven sleutel; als de sleutel wordt gevonden, wordt de vermelding verwijderd.

BOOL RemoveKey(ARG_KEY key);

Parameterwaarden

ARG_KEY
Sjabloonparameter waarmee het type sleutel wordt opgegeven.

key
Sleutel voor het te verwijderen element.

Retourwaarde

Niet-nul als de vermelding is gevonden en is verwijderd; anders 0.

Opmerkingen

De DestructElements helperfunctie wordt gebruikt om de vermelding te verwijderen.

Example

Zie het voorbeeld voor CMap::SetAt.

CMap::SetAt

Het primaire middel om een element in een kaart in te voegen.

void SetAt(ARG_KEY key, ARG_VALUE newValue);

Parameterwaarden

ARG_KEY
Sjabloonparameter die het type van de key parameter opgeeft.

key
Hiermee geeft u de sleutel van het nieuwe element.

ARG_VALUE
Sjabloonparameter die het type van de newValue parameter opgeeft.

newValue
Hiermee geeft u de waarde van het nieuwe element.

Opmerkingen

Eerst wordt de sleutel opgezoekd. Als de sleutel wordt gevonden, wordt de bijbehorende waarde gewijzigd; anders wordt er een nieuw sleutel-waardepaar gemaakt.

Example

CMap<int, int, CPoint, CPoint> myMap;

// Add 10 elements to the map.
for (int i = 0; i < 10; i++)
   myMap.SetAt(i, CPoint(i, i));

// Remove the elements with even key values.
POSITION pos = myMap.GetStartPosition();
int nKey;
CPoint pt;
while (pos != NULL)
{
   myMap.GetNextAssoc(pos, nKey, pt);

   if ((nKey % 2) == 0)
      myMap.RemoveKey(nKey);
}

// Print the element values.
pos = myMap.GetStartPosition();
while (pos != NULL)
{
   myMap.GetNextAssoc(pos, nKey, pt);
   _tprintf_s(_T("Current key value at %d: %d,%d\n"),
              nKey, pt.x, pt.y);
}

Zie ook

MFC-voorbeeld COLLECT
CObject klasse
Hiërarchiegrafiek