Sdílet prostřednictvím


CMapStringToOb Třída

Třída kolekce slovníku, která mapuje jedinečné CString objekty na CObject ukazatele.

Syntaxe

class CMapStringToOb : public CObject

Členové

Veřejné konstruktory

Název Popis
CMapStringToOb::CMapStringToOb Konstruktor

Veřejné metody

Název Popis
CMapStringToOb::GetCount Vrátí počet prvků v této mapě.
CMapStringToOb::GetHashTableSize Určuje aktuální počet prvků v tabulce hash.
CMapStringToOb::GetNextAssoc Získá další prvek pro iterování.
CMapStringToOb::GetSize Vrátí počet prvků v této mapě.
CMapStringToOb::GetStartPosition Vrátí pozici prvního prvku.
CMapStringToOb::HashKey Vypočítá hodnotu hash zadaného klíče.
CMapStringToOb::InitHashTable Inicializuje tabulku hash.
CMapStringToOb::IsEmpty Testuje podmínku prázdné mapy (žádné prvky).
CMapStringToOb::Lookup Vyhledá ukazatel void na základě klíče ukazatele void. Hodnota ukazatele, nikoli entita, na kterou odkazuje, se používá pro porovnání klíčů.
CMapStringToOb::LookupKey Vrátí odkaz na klíč přidružený k zadané hodnotě klíče.
CMapStringToOb::RemoveAll Odebere všechny prvky z této mapy.
CMapStringToOb::RemoveKey Odebere prvek určený klíčem.
CMapStringToOb::SetAt Vloží prvek do mapy; nahradí existující prvek, pokud je nalezen odpovídající klíč.

Veřejné operátory

Název Popis
CMapStringToOb::operator [ ] Vloží prvek do mapy – nahrazení operátoru SetAt.

Poznámky

Po vložení páru CString- CObject* (elementu) do mapy můžete dvojici efektivně načíst nebo odstranit pomocí řetězce nebo CString hodnoty jako klíče. Můžete také iterovat všechny prvky v mapě.

Proměnná typu POSITION se používá pro alternativní přístup k položkám ve všech variantách mapování. Položku si můžete POSITION zapamatovat a iterovat pomocí mapy. Možná si myslíte, že tato iterace je sekvenční podle hodnoty klíče; to není. Posloupnost načtených prvků je neurčitá.

CMapStringToObIMPLEMENT_SERIAL obsahuje makro pro podporu serializace a dumpingu jeho prvků. Každý prvek je serializován postupně, pokud je mapa uložena do archivu, buď s přetíženým kurzorem ( <<) operátor nebo členské Serialize funkce.

Pokud potřebujete diagnostický výpis jednotlivých prvků v mapě ( CString hodnotu a CObject obsah), musíte nastavit hloubku kontextu výpisu na hodnotu 1 nebo vyšší.

Při odstranění objektu CMapStringToOb nebo při odebrání CString jeho prvků se objekty a CObject ukazatele odeberou. Objekty odkazované ukazateli CObject nejsou zničeny.

Odvození třídy mapování se podobá odvození seznamu. Na obrázku odvození třídy seznamu pro zvláštní účely najdete v článku Kolekce .

Hierarchie dědičnosti

CObject

CMapStringToOb

Požadavky

Záhlaví: afxcoll.h

CMapStringToOb::CMapStringToOb

Vytvoří prázdnou CStringmapu -to- CObject* .

CMapStringToOb(INT_PTR nBlockSize = 10);

Parametry

nBlockSize
Určuje členitost přidělení paměti pro rozšíření mapy.

Poznámky

S rostoucím nárůstem mapy se paměť přiděluje v jednotkách nBlockSize položek.

V následující tabulce jsou uvedeny další členské funkce, které jsou podobné CMapStringToOb:: CMapStringToOb.

Třída Členská funkce
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 );

Příklad

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

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

Podívejte CObList::CObList se na výpis CAge třídy použité ve všech příkladech kolekce.

CMapStringToOb::GetCount

Určuje, kolik prvků je v mapě.

INT_PTR GetCount() const;

Návratová hodnota

Počet prvků v této mapě.

Poznámky

V následující tabulce jsou uvedeny další členské funkce, které jsou podobné CMapStringToOb::GetCount.

Třída Členská funkce
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;

Příklad

Podívejte CObList::CObList se na výpis CAge třídy použité ve všech příkladech kolekce.

CMapStringToOb map;

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

CMapStringToOb::GetHashTableSize

Určuje aktuální počet prvků v tabulce hash.

UINT GetHashTableSize() const;

Návratová hodnota

Vrátí počet prvků v tabulce hash.

Poznámky

V následující tabulce jsou uvedeny další členské funkce, které jsou podobné CMapStringToOb::GetHashTableSize.

Třída Členská funkce
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

Načte prvek mapy na a rNextPositionpak aktualizuje rNextPosition odkaz na další prvek v mapě.

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

Parametry

rNextPosition
Určuje odkaz na hodnotu POSITION vrácenou předchozím GetNextAssoc voláním nebo GetStartPosition voláním.

rKey
Určuje vrácený klíč načteného prvku (řetězec).

rValue
Určuje vrácenou hodnotu načteného prvku ( CObject ukazatel). Další informace o tomto parametru najdete v poznámkách .

Poznámky

Tato funkce je nejužitečnější pro iteraci všemi prvky v mapě. Všimněte si, že pořadí pozic nemusí být nutně stejné jako sekvence hodnot klíče.

Pokud je načtený prvek poslední v mapě, pak je nová hodnota rNextPosition nastavena na NULL.

rValue Pro parametr nezapomeňte přetypovat typ objektu na CObject*&, což je to, co kompilátor vyžaduje, jak je znázorněno v následujícím příkladu:

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

To neplatí GetNextAssoc pro mapy založené na šablonách.

V následující tabulce jsou uvedeny další členské funkce, které jsou podobné CMapStringToOb::GetNextAssoc.

Třída Členská funkce
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;

Příklad

Podívejte CObList::CObList se na výpis CAge třídy použité ve všech příkladech kolekce.

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
}

Výsledky z tohoto programu jsou následující:

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

Vrátí počet prvků mapy.

INT_PTR GetSize() const;

Návratová hodnota

Počet položek v mapě.

Poznámky

Voláním této metody načtěte počet prvků v mapě.

V následující tabulce jsou uvedeny další členské funkce, které jsou podobné CMapStringToOb::GetSize.

Třída Členská funkce
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;

Příklad

CMapStringToOb map;

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

CMapStringToOb::GetStartPosition

Spustí iteraci mapy vrácením POSITION hodnoty, kterou lze předat GetNextAssoc volání.

POSITION GetStartPosition() const;

Návratová hodnota

Hodnota POSITION , která označuje počáteční pozici pro iteraci mapy, nebo NULL pokud je mapa prázdná.

Poznámky

Posloupnost iterací není předvídatelná; proto "první prvek v mapě" nemá žádný zvláštní význam.

V následující tabulce jsou uvedeny další členské funkce, které jsou podobné CMapStringToOb::GetStartPosition.

Třída Členská funkce
CMapPtrToPtr POSITION GetStartPosition() const;
CMapPtrToWord POSITION GetStartPosition() const;
CMapStringToPtr POSITION GetStartPosition() const;
CMapStringToString POSITION GetStartPosition() const;
CMapWordToOb POSITION GetStartPosition() const;
CMapWordToPtr POSITION GetStartPosition() const;

Příklad

Podívejte se na příklad pro CMapStringToOb::GetNextAssoc.

CMapStringToOb::HashKey

Vypočítá hodnotu hash zadaného klíče.

UINT HashKey(LPCTSTR key) const;

Parametry

key
Klíč, jehož hodnota hash se má vypočítat.

Návratová hodnota

Hodnota hash klíče

Poznámky

V následující tabulce jsou uvedeny další členské funkce, které jsou podobné CMapStringToOb::HashKey.

Třída Členská funkce
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

Inicializuje tabulku hash.

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

Parametry

hashSize
Počet položek v tabulce hash

bAllocNow
Pokud TRUEpři inicializaci přiděluje hashovací tabulku, v opačném případě je tabulka přidělena v případě potřeby.

Poznámky

Pro zajištění nejlepšího výkonu by velikost tabulky hash měla být primárním číslem. Aby se minimalizovaly kolize, měla by být velikost přibližně 20 % větší než největší očekávaná datová sada.

V následující tabulce jsou uvedeny další členské funkce, které jsou podobné CMapStringToOb::InitHashTable.

Třída Členská funkce
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

Určuje, zda je mapa prázdná.

BOOL IsEmpty() const;

Návratová hodnota

Nenulové, pokud tato mapa neobsahuje žádné prvky; jinak 0.

Příklad

Podívejte se na příklad pro RemoveAll.

Poznámky

V následující tabulce jsou uvedeny další členské funkce, které jsou podobné CMapStringToOb:: IsEmpty.

Třída Členská funkce
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

CObject Vrátí ukazatel na CString základě hodnoty.

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

Parametry

key
Určuje klíč řetězce, který identifikuje prvek, který se má vyhledat.

rValue
Určuje vrácenou hodnotu z hledaná elementu.

Návratová hodnota

Nenulové, pokud byl prvek nalezen; jinak 0.

Poznámky

Lookup používá algoritmus hash k rychlému vyhledání prvku mapy s klíčem, který přesně odpovídá hodnotě CString .

V následující tabulce jsou uvedeny další členské funkce, které jsou podobné CMapStringToOb::LookUp.

Třída Členská funkce
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;

Příklad

Podívejte CObList::CObList se na výpis CAge třídy použité ve všech příkladech kolekce.

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

Vrátí odkaz na klíč přidružený k zadané hodnotě klíče.

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

Parametry

key
Určuje klíč řetězce, který identifikuje prvek, který se má vyhledat.

rKey
Odkaz na přidružený klíč.

Návratová hodnota

Nenulové, pokud byl klíč nalezen; jinak 0.

Poznámky

Použití odkazu na klíč je nebezpečné, pokud se použije po odebrání přidruženého prvku z mapy nebo po zničení mapy.

V následující tabulce jsou uvedeny další členské funkce, které jsou podobné CMapStringToOb:: LookupKey.

Třída Členská funkce
CMapStringToPtr BOOL LookupKey( LPCTSTR key , LPCTSTR& rKey ) const;
CMapStringToString BOOL LookupKey( LPCTSTR key , LPCTSTR& rKey ) const;

CMapStringToOb::operator [ ]

Pohodlná náhrada členské SetAt funkce.

CObject*& operator[ ](lpctstr key);

Návratová hodnota

Odkaz na ukazatel na CObject objekt nebo NULL pokud je mapa prázdná nebo key je mimo rozsah.

Poznámky

Lze jej tedy použít pouze na levé straně příkazu přiřazení (an l-value). Pokud neexistuje žádný prvek mapování se zadaným klíčem, vytvoří se nový prvek.

Neexistuje žádná "pravá strana" (r-value) ekvivalentní tomuto operátoru, protože existuje možnost, že se klíč v mapě nenašel. Pro načtení elementu Lookup použijte členovou funkci.

V následující tabulce jsou uvedeny další členské funkce, které jsou podobné CMapStringToOb::operator [].

Třída Členská funkce
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 );

Příklad

Podívejte CObList::CObList se na výpis CAge třídy použité ve všech příkladech kolekce.

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

Výsledky z tohoto programu jsou následující:

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

CMapStringToOb::RemoveAll

Odebere všechny prvky z této mapy a zničí CString klíčové objekty.

void RemoveAll();

Poznámky

Objekty CObject odkazované jednotlivými klíči se nezničí. Funkce RemoveAll může způsobit nevracení paměti, pokud nezajistíte, že jsou odkazované CObject objekty zničeny.

Funkce funguje správně, pokud je mapa již prázdná.

V následující tabulce jsou uvedeny další členské funkce, které jsou podobné CMapStringToOb::RemoveAll.

Třída Členská funkce
CMapPtrToPtr void RemoveAll();
CMapPtrToWord void RemoveAll();
CMapStringToPtr void RemoveAll();
CMapStringToString void RemoveAll();
CMapWordToOb void RemoveAll();
CMapWordToPtr void RemoveAll();

Příklad

Podívejte CObList::CObList se na výpis CAge třídy použité ve všech příkladech kolekce.

{
   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

Vyhledá položku mapy odpovídající zadanému klíči; pokud se klíč najde, odebere položku.

BOOL RemoveKey(LPCTSTR key);

Parametry

key
Určuje řetězec použitý pro vyhledávání v mapě.

Návratová hodnota

Nenulové, pokud byla položka nalezena a úspěšně odstraněna; jinak 0.

Poznámky

To může způsobit nevracení paměti, pokud CObject objekt není odstraněn jinde.

V následující tabulce jsou uvedeny další členské funkce, které jsou podobné CMapStringToOb::RemoveKey.

Třída Členská funkce
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 );

Příklad

Podívejte CObList::CObList se na výpis CAge třídy použité ve všech příkladech kolekce.

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

Výsledky z tohoto programu jsou následující:

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

Primárním prostředkem pro vložení elementu do mapy.

void SetAt(
    LPCTSTR key,
    CObject* newValue);

Parametry

key
Určuje řetězec, který je klíčem nového prvku.

newValue
Určuje CObject ukazatel, který je hodnotou nového prvku.

Poznámky

Za prvé, klíč se hledá. Pokud se klíč najde, změní se odpovídající hodnota; v opačném případě se vytvoří nový prvek klíč-hodnota.

V následující tabulce jsou uvedeny další členské funkce, které jsou podobné CMapStringToOb::SetAt.

Třída Členská funkce
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 );

Příklad

Podívejte CObList::CObList se na výpis CAge třídy použité ve všech příkladech kolekce.

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

Výsledky z tohoto programu jsou následující:

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

Viz také

CObject Třída
Graf hierarchie
CMapPtrToPtr Třída
CMapPtrToWord Třída
CMapStringToPtr Třída
CMapStringToString Třída
CMapWordToOb Třída
CMapWordToPtr Třída