Sdílet prostřednictvím


Pomocné rutiny třídy kolekce

Třídy CMapkolekce , CLista CArray používat šablonované globální pomocné funkce pro takové účely jako porovnání, kopírování a serializace prvků. Jako součást implementace tříd založených na CMap, CLista CArray, musíte tyto funkce podle potřeby přepsat pomocí verzí přizpůsobených typu dat uložených v mapě, seznamu nebo poli. Informace o přepsání pomocných funkcí, jako SerializeElementsje například , naleznete v článku Kolekce: Jak vytvořit typ-bezpečné kolekce. Mějte na paměti, že ConstructElements jsou DestructElements zastaralé.

Knihovna tříd Microsoft Foundation poskytuje následující globální funkce v afxtempl.h, které vám pomůžou přizpůsobit třídy kolekcí:

Pomocné rutiny třídy kolekce

Název Popis
CompareElements Určuje, zda jsou prvky stejné.
CopyElements Zkopíruje prvky z jednoho pole do druhého.
DumpElements Poskytuje výstup diagnostiky orientovaný na stream.
HashKey Vypočítá hashovací klíč.
SerializeElements Ukládá nebo načítá elementy do archivu nebo z archivu.

CompareElements

Volal přímo CList::Find a nepřímo a CMap::Lookup CMap::operator[].

template<class TYPE, class ARG_TYPE>
BOOL AFXAPI
CompareElements(
    const TYPE* pElement1,
    const ARG_TYPE* pElement2);

Parametry

TYP
Typ prvního prvku, který se má porovnat.

pElement1
Ukazatel na první prvek, který se má porovnat.

ARG_TYPE
Typ druhého prvku, který se má porovnat.

pElement2
Ukazatel na druhý prvek, který se má porovnat.

Návratová hodnota

Nenulové, pokud se objekt, na který odkazuje pElement1 , rovná objektu, na který odkazuje pElement2; jinak 0.

Poznámky

Volání CMap používají CMap parametry šablony KEY a ARG_KEY.

Výchozí implementace vrátí výsledek porovnání *pElement1 a *pElement2. Tuto funkci přepište tak, aby porovnávala prvky způsobem, který je vhodný pro vaši aplikaci.

Jazyk C++ definuje relační operátor ( ==) pro jednoduché typy (char, int, floatatd.), ale nedefinuje relační operátor pro třídy a struktury. Pokud chcete použít CompareElements nebo vytvořit instanci jedné z tříd kolekce, které ji používají, musíte buď definovat relační operátor nebo přetížení CompareElements s verzí, která vrací příslušné hodnoty.

Požadavky

Hlavička: afxtempl.h

CopyElements

Tato funkce je volána přímo CArray ::Append a CArray::Copy.

template<class TYPE>
void AFXAPI CopyElements(
    TYPE* pDest,
    const TYPE* pSrc,
    INT_PTR nCount);

Parametry

TYP
Parametr šablony určující typ prvků, které se mají zkopírovat.

pDest
Ukazatel na cíl, kam se prvky zkopírují.

pSrc
Ukazatel na zdroj prvků, které se mají zkopírovat.

nCount
Počet prvků, které se mají zkopírovat.

Poznámky

Výchozí implementace používá k provedení operace kopírování operátor jednoduchého přiřazení ( = ). Pokud typ, který se kopíruje, nemá přetížený operátor=, provede výchozí implementace bitovou kopii.

Informace o implementaci této a dalších pomocných funkcí najdete v článku Kolekce: Vytvoření kolekce typu bezpečné.

Požadavky

Hlavička afxtempl.h

DumpElements

Poskytuje diagnostický výstup orientovaný na stream v textové podobě pro prvky kolekce při přepsání.

template<class TYPE>
void  AFXAPI DumpElements(
    CDumpContext& dc,
    const TYPE* pElements,
    INT_PTR nCount);

Parametry

stejnosměrný proud
Kontext výpisu paměti pro dumpingové prvky.

TYP
Parametr šablony určující typ prvků

pElements
Ukazatel na prvky, které se mají vyčíst.

nCount
Počet prvků, které mají být vypsané.

Poznámky

Funkce CArray::Dumpa CMap::Dump , CList::Dumpvolání, pokud hloubka výpisu je větší než 0.

Výchozí implementace nic nedělá. Pokud jsou prvky vaší kolekce odvozeny CObject, přepsání obvykle iteruje prvky kolekce, volání Dump pro každý prvek následně.

Požadavky

Hlavička afxtempl.h

HashKey

Vypočítá hodnotu hash pro daný klíč.

template<class ARG_KEY>
AFX_INLINE UINT AFXAPI HashKey(ARG_KEY  key);

Parametry

ARG_KEY
Parametr šablony určující datový typ použitý pro přístup ke klíčům map.

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

Návratová hodnota

Hodnota hash klíče.

Poznámky

Tato funkce je volána přímo CMap::RemoveKey a nepřímo pomocí CMap::Lookup a CMap::operator[].

Výchozí implementace vytvoří hodnotu hash posunutím klíče doprava o čtyři pozice. Tuto funkci přepište tak, aby vracela hodnoty hash vhodné pro vaši aplikaci.

Příklad

template <> UINT AFXAPI HashKey(unsigned __int64 key)
{
   // Generate the hash value by XORing the lower 32 bits of the number
   // with the upper 32 bits
   return(UINT(key) ^ UINT(key >> 32));
}

Požadavky

Hlavička afxtempl.h

SerializeElements

CArray, CList a CMap volají tuto funkci pro serializaci elementů.

template<class TYPE>
void AFXAPI SerializeElements(CArchive& ar, TYPE* pElements, INT_PTR nCount);

Parametry

TYP
Parametr šablony určující typ prvků

ar
Archivní objekt pro archivaci do nebo z.

pElements
Ukazatel na prvky, které se archivují.

nCount
Počet archivovaných prvků

Poznámky

Výchozí implementace provede bitové čtení nebo zápis.

Informace o implementaci této a dalších pomocných funkcí najdete v článku Kolekce: Vytvoření kolekce typu bezpečné.

Příklad

Podívejte se na příklad v článku Kolekce: Vytvoření kolekce typu bezpečné.

Požadavky

Hlavička afxtempl.h

Viz také

Makra a globální objekty
CMap – třída
CList – třída
CArray – třída