Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
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:
keyA kulcstípus tényleges értéke.valueA 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);
}