Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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
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:
keyDe werkelijke waarde van het sleuteltype.valueDe 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);
}