Suggerimenti per la scelta di una classe di raccolte

Questo articolo contiene informazioni dettagliate che consentono di scegliere una classe di raccolta per una particolare applicazione.

La scelta di una classe di raccolta dipende da diversi fattori, tra cui:

  • Le funzionalità della forma della classe: ordinamento, indicizzazione e prestazioni, come illustrato nella tabella Funzionalità delle forme di raccolta più avanti in questo argomento

  • Se la classe utilizza modelli C++

  • Se gli elementi archiviati nella raccolta possono essere serializzati

  • Se per gli elementi archiviati nella raccolta è possibile eseguire il dump per la diagnostica

  • Se la raccolta è indipendente dai tipi

Nella tabella seguente, Funzionalità delle forme di raccolta, sono riepilogate le caratteristiche delle forme di raccolta disponibili.

  • Le colonne 2 e 3 descrivono le caratteristiche di ordinamento e accesso di ogni forma. Nella tabella il termine "ordine" significa che l'ordine di inserimento ed eliminazione degli elementi determina il relativo ordine nella raccolta. Non significa che gli elementi sono ordinati in base al rispettivo contenuto. Il termine "indicizzazione" significa che è possibile recuperare gli elementi nella raccolta da un indice Integer, analogamente agli elementi in una matrice standard.

  • Le colonne 4 e 5 descrivono le prestazioni di ogni forma. In applicazioni che richiedono molte operazioni di inserimento nella raccolta, la velocità di inserimento potrebbe essere particolarmente importante. In altre applicazioni potrebbe essere più importante la velocità di ricerca.

  • La colonna 6 indica se ogni forma consente elementi duplicati.

Funzionalità delle forme di raccolta

Forma Quantità ordinata Indicizzato Inserimento di un elemento Ricerca di un elemento specificato Elementi duplicati
List No Veloce Lente
Matrice Tramite valore Integer Lente Lente
Mapping No Tramite chiave Veloce Veloce No (chiavi) Sì (valori)

Nella tabella seguente, Caratteristiche delle classi di raccolta MFC, vengono riepilogate altre importanti caratteristiche di classi della raccolta MFC specifiche come guida alla selezione. La scelta può variare a seconda se la classe è basata su modelli C++, se gli elementi possono essere serializzati tramite il meccanismo di serializzazione dei documenti MFC, se è possibile eseguire il dump dei relativi elementi tramite il meccanismo di dump diagnostico di MFC o se la classe è indipendente dai tipi, ovvero se è in grado di garantire il tipo di elementi archiviati in e recuperati da una raccolta basata sulla classe.

Caratteristiche delle classi di raccolta MFC

Classe Usa C++

modelli
Può essere

serializzato
Può essere

oggetto di dump
È

indipendente dai tipi
CArray Sì 1 Sì 1 No
CByteArray No Sì 3
CDWordArray No Sì 3
CList Sì 1 Sì 1 No
CMap Sì 1 Sì 1 No
CMapPtrToPtr No No No
CMapPtrToWord No No No
CMapStringToOb No No
CMapStringToPtr No No No
CMapStringToString No Sì 3
CMapWordToOb No No
CMapWordToPtr No No No
CObArray No No
CObList No No
CPtrArray No No No
CPtrList No No No
CStringArray No Sì 3
CStringList No Sì 3
CTypedPtrArray Dipende 2
CTypedPtrList Dipende 2
CTypedPtrMap Dipende 2
CUIntArray No No Sì 3
CWordArray No Sì 3
  1. Per serializzare, è necessario chiamare in modo esplicito la funzione Serialize dell'oggetto raccolta. Per eseguire il dump, è necessario chiamare esplicitamente la funzione Dump. Non è possibile usare il modulo ar << collObj per la serializzazione o il modulo dmp<< collObj per eseguire il dump.

  2. La serializzabilità dipende infatti dal tipo di raccolta sottostante. Ad esempio, se una matrice di puntatori tipizzata è basata su CObArray, è serializzabile, mentre se è basata su CPtrArray, non è serializzabile. In generale, le classi "Ptr" non possono essere serializzate.

  3. Se in questa colonna è contrassegnato Sì, una classe Collection non basata su modelli è indipendente dai tipi purché usata per lo scopo previsto. Ad esempio, se si archiviano byte in una classe CByteArray, la matrice è indipendente dai tipi. Al contrario, se si usa per archiviare caratteri, la sua indipendenza dai tipi è meno sicura.

Vedi anche

Raccolte
Classi basate su modello
Procedura: Creare una raccolta indipendente dai tipi
Accesso a tutti i membri di una raccolta