Megosztás a következőn keresztül:


CMap osztály

Megjegyzés:

A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Egy szótárgyűjteményi osztály, amely egyedi kulcsokat képez le értékekhez.

Szemantika

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

Paraméterek

KEY
A térkép kulcsaként használt objektum osztálya.

ARG_KEY
Az argumentumokhoz KEY használt adattípus; általában a hivatkozás.KEY

VALUE
A térképen tárolt objektum osztálya.

ARG_VALUE
Az argumentumokhoz VALUE használt adattípus; általában a hivatkozás.VALUE

Tagok

Nyilvános struktúrák

Név Description
CMap::CPair Egy kulcsértéket és a társított objektum értékét tartalmazó beágyazott struktúra.

Nyilvános konstruktorok

Név Description
CMap::CMap Olyan gyűjteményt hoz létre, amely kulcsokat képez le értékekhez.

Nyilvános metódusok

Név Description
CMap::GetCount A térkép elemeinek számát adja vissza.
CMap::GetHashTableSize A kivonattáblában lévő elemek számát adja vissza.
CMap::GetNextAssoc Lekéri az iterálás következő elemét.
CMap::GetSize A térkép elemeinek számát adja vissza.
CMap::GetStartPosition Az első elem pozícióját adja vissza.
CMap::InitHashTable Inicializálja a kivonattáblát, és megadja annak méretét.
CMap::IsEmpty Az üres leképezési feltétel (elemek nélkül) tesztelése.
CMap::Lookup Megkeresi az adott kulcshoz hozzárendelt értéket.
CMap::PGetFirstAssoc Egy mutatót ad vissza az első elemhez.
CMap::PGetNextAssoc Az iterálás következő elemére mutató mutatót kap.
CMap::PLookup Egy olyan kulcsra mutató mutatót ad vissza, amelynek értéke megegyezik a megadott értékkel.
CMap::RemoveAll Eltávolítja a térkép összes elemét.
CMap::RemoveKey Eltávolít egy kulcs által megadott elemet.
CMap::SetAt Elem beszúrása a térképre; lecserél egy meglévő elemet, ha talál egy megfelelő kulcsot.

Nyilvános operátorok

Név Description
CMap::operator [ ] Elem beszúrása a térképbe – operátorhelyettesítés a következőhöz SetAt: .

Megjegyzések

Miután beszúrt egy kulcs-érték párot (elemet) a térképbe, a kulcs használatával hatékonyan lekérheti vagy törölheti a párot a hozzáféréshez. A térkép összes elemét át is iterálhatja.

A bejegyzésekhez való alternatív hozzáféréshez egy típusváltozót POSITION használunk. Egy bejegyzés "megjegyezésére" és a térképen való iterálásra használható POSITION . Azt gondolhatja, hogy ez az iteráció a kulcsértékek szerint szekvenciális; nem. A beolvasott elemek sorrendje meghatározatlan.

Az osztály egyes tagfüggvényei globális segédfüggvényeket hívnak meg, amelyeket az CMap osztály legtöbb használata esetén testre kell szabni. Tekintse meg az MFC-referencia Makrók és globálisak szakaszának gyűjteményosztály-segítőit.

CMap felülbírálások CObject::Serialize az elemek szerializálásának és memóriaképének támogatásához. Ha egy térképet egy archívumban tárol a rendszer Serialize, az egyes térképelemek egymás után szerializálva lesznek. A segédfüggvény alapértelmezett implementációja SerializeElements bitenkénti írást végez. Az egérmutató-gyűjteményelemek vagy más felhasználó által definiált CObject típusok szerializálásával kapcsolatos információkért lásd: Hogyan lehet Type-Safe gyűjteményt létrehozni.

Ha a térkép egyes elemeinek (kulcsainak és értékeinek) diagnosztikai memóriaképére van szüksége, a memóriakép-környezet mélységét 1 vagy nagyobbra kell állítania.

CMap Egy objektum törlésekor vagy elemeinek eltávolításakor a kulcsok és az értékek is törlődnek.

A térképosztály származtatása hasonló a lista származtatásához. A gyűjtemények című cikk egy speciális célú listaosztály származtatását szemlélteti.

Öröklési hierarchia

CObject

CMap

Requirements

Fejléc:afxtempl.h

CMap::CMap

Üres térképet hoz létre.

CMap(INT_PTR nBlockSize = 10);

Paraméterek

nBlockSize
Megadja a térkép kiterjesztéséhez szükséges memóriafoglalás részletességét.

Megjegyzések

A térkép növekedésével a rendszer bejegyzésegységekben nBlockSize foglalja le a memóriát.

Example

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

CMap::CPair

Kulcsértéket és a társított objektum értékét tartalmazza.

Megjegyzések

Ez egy beágyazott struktúra az osztályon CMapbelül.

A struktúra két mezőből áll:

  • key A kulcstípus tényleges értéke.

  • value A társított objektum értéke.

A függvény a visszatérési értékek tárolására szolgál a következőből: CMap::PLookup, CMap::PGetFirstAssocés CMap::PGetNextAssoc.

Example

A használati példákat lásd a következő példában CMap::PLookup: .

CMap::GetCount

Lekéri a térkép elemeinek számát.

INT_PTR GetCount() const;

Visszaadott érték

Az elemek száma.

Example

Lásd a példát a CMap::Lookup.

CMap::GetHashTableSize

Meghatározza a térkép kivonattáblájában szereplő elemek számát.

UINT GetHashTableSize() const;

Visszaadott érték

A kivonattáblában lévő elemek száma.

Example

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

UINT uTableSize = myMap.GetHashTableSize();

CMap::GetNextAssoc

Lekéri a térképelemet a következő helyen rNextPosition, majd frissíti rNextPosition a térkép következő elemére való hivatkozáshoz.

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

Paraméterek

rNextPosition
Egy előző GetNextAssoc vagy GetStartPosition hívás által visszaadott értékre POSITION mutató hivatkozást ad meg.

KEY
A térkép kulcsának típusát meghatározó sablonparaméter.

rKey
A lekért elem visszaadott kulcsát adja meg.

VALUE
A térkép értékének típusát meghatározó sablonparaméter.

rValue
A lekért elem visszaadott értékét adja meg.

Megjegyzések

Ez a függvény leginkább a térkép összes elemének iterálásához hasznos. Vegye figyelembe, hogy a pozícióütemezés nem feltétlenül ugyanaz, mint a kulcsérték-sorozat.

Ha a lekért elem az utolsó a térképen, akkor az új érték rNextPosition a következőre NULLvan állítva: .

Example

Lásd a példát a CMap::SetAt.

CMap::GetSize

A térképelemek számát adja vissza.

INT_PTR GetSize() const;

Visszaadott érték

A térkép elemeinek száma.

Megjegyzések

Hívja meg ezt a metódust a térkép elemeinek számának lekéréséhez.

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

Elindít egy leképezési iterációt egy POSITION olyan érték visszaadásával, amely átadható egy GetNextAssoc hívásnak.

POSITION GetStartPosition() const;

Visszaadott érték

Olyan POSITION érték, amely a térkép iterálásának kezdő pozícióját jelzi; vagy NULL ha a térkép üres.

Megjegyzések

Az iterációs sorrend nem kiszámítható; ezért a "térkép első eleme" nem rendelkezik különleges jelentőséggel.

Example

Lásd a példát a CMap::SetAt.

CMap::InitHashTable

Inicializálja a kivonattáblát.

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

Paraméterek

hashSize
A kivonattáblában lévő bejegyzések száma.

bAllocNow
Ha TRUEaz inicializáláskor lefoglalja a kivonattáblát, ellenkező esetben a rendszer szükség esetén lefoglalja a táblát.

Megjegyzések

A legjobb teljesítmény érdekében a kivonattábla méretének prímszámnak kell lennie. Az ütközések minimalizálása érdekében a méretnek nagyjából 20 százalékkal nagyobbnak kell lennie, mint a legnagyobb várható adatkészlet.

Example

Lásd a példát a CMap::Lookup.

CMap::IsEmpty

Meghatározza, hogy a térkép üres-e.

BOOL IsEmpty() const;

Visszaadott érték

Nonzero, ha ez a térkép nem tartalmaz elemeket; egyéb esetben 0.

Example

Lásd a példát a CMap::RemoveAll.

CMap::Lookup

Megkeresi az adott kulcshoz hozzárendelt értéket.

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

Paraméterek

ARG_KEY
Az érték típusát key meghatározó sablonparaméter.

key
Megadja a keresendő elemet azonosító kulcsot.

VALUE
Megadja a keresendő érték típusát.

rValue
Megkapja a keresett értéket.

Visszaadott érték

Nemzero, ha az elem megtalálható; egyéb esetben 0.

Megjegyzések

Lookup kivonatoló algoritmussal gyorsan megtalálhatja a térképelemet egy olyan kulccsal, amely pontosan egyezik az adott kulccsal.

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 [ ]

A tagfüggvény kényelmes helyettesítője SetAt .

VALUE& operator[](arg_key key);

Paraméterek

VALUE
A leképezési érték típusát meghatározó sablonparaméter.

ARG_KEY
A kulcsérték típusát meghatározó sablonparaméter.

key
Az érték lekéréséhez használt kulcs a térképről.

Megjegyzések

Így csak a hozzárendelési utasítás (l-érték) bal oldalán használható. Ha nincs térképelem a megadott kulccsal, akkor létrejön egy új elem.

Ennek az operátornak nincs "jobb oldala" (r-érték), mert lehetséges, hogy nem található kulcs a térképen. Elemlekéréshez használja a Lookup tagfüggvényt.

Example

Lásd a példát a CMap::Lookup.

CMap::PGetFirstAssoc

A térképobjektum első bejegyzését adja vissza.

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

Visszaadott érték

Mutató a térkép első bejegyzésére; lásd: CMap::CPair. Ha a térkép nem tartalmaz bejegyzéseket, az érték a következő NULL: .

Megjegyzések

Hívja meg ezt a függvényt, hogy visszaadjon egy mutatót a térképobjektum első elemének.

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

Lekéri a program által pAssocRecmutatott térképelemet.

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

CPair *PGetNextAssoc(const CPair* pAssocRet);

Paraméterek

pAssocRet
Egy előző PGetNextAssoc vagy CMap::PGetFirstAssoc hívás által visszaadott térképbejegyzésre mutat.

Visszaadott érték

Mutató a térkép következő bejegyzésére; lásd: CMap::CPair. Ha az elem az utolsó a térképen, akkor az érték .NULL

Megjegyzések

Hívja meg ezt a metódust a térkép összes elemének iterálásához. Kérje le az első elemet egy hívással PGetFirstAssoc , majd iterálja végig a térképen a következő hívásokkal PGetNextAssoc: .

Example

Lásd a példát a CMap::PGetFirstAssoc.

CMap::PLookup

Megkeresi az adott kulcshoz hozzárendelt értéket.

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

Paraméterek

key
A keresendő elem kulcsa.

Visszaadott érték

Egy kulcsstruktúra mutatója; lásd: CMap::CPair. Ha nem található egyezés, CMap::PLookup a visszaadott értéket NULLadja vissza.

Megjegyzések

Ennek a metódusnak a meghívásával megkereshet egy térképelemet egy olyan kulccsal, amely pontosan megfelel az adott kulcsnak.

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

A globális segédfüggvény DestructElementsmeghívásával eltávolítja a térkép összes értékét.

void RemoveAll();

Megjegyzések

A függvény megfelelően működik, ha a térkép már üres.

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

Megkeresi a megadott kulcsnak megfelelő térképbejegyzést; ezután, ha a kulcs megtalálható, eltávolítja a bejegyzést.

BOOL RemoveKey(ARG_KEY key);

Paraméterek

ARG_KEY
A kulcs típusát meghatározó sablonparaméter.

key
Az eltávolítandó elem kulcsa.

Visszaadott érték

Nemzero, ha a bejegyzés megtalálható és sikeresen el lett távolítva; egyéb esetben 0.

Megjegyzések

A DestructElements segédfüggvény a bejegyzés eltávolítására szolgál.

Example

Lásd a példát a CMap::SetAt.

CMap::SetAt

Az elsődleges azt jelenti, hogy egy elemet beszúr egy térképbe.

void SetAt(ARG_KEY key, ARG_VALUE newValue);

Paraméterek

ARG_KEY
A paraméter típusát key meghatározó sablonparaméter.

key
Megadja az új elem kulcsát.

ARG_VALUE
A paraméter típusát newValue meghatározó sablonparaméter.

newValue
Az új elem értékét adja meg.

Megjegyzések

Először is, a kulcs fel van keresve. Ha a kulcs megtalálható, a megfelelő érték megváltozik; ellenkező esetben létrejön egy új kulcs-érték pár.

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);
}

Lásd még

MFC-minta COLLECT
CObject osztály
hierarchiadiagram