Freigeben über


Empfehlungen für die Auswahl einer Sammlungsklasse

Dieser Artikel enthält detaillierte Informationen, die Ihnen bei der Auswahl einer Sammlungsklasse für Ihre spezifischen Anwendungsanforderungen helfen.

Die Auswahl einer Sammlungsklasse hängt von einer Reihe von Faktoren ab, darunter:

  • Die Features des Klassen-Shapes: Reihenfolge, Indizierung und Leistung, wie in der Tabelle " Sammlungs-Shape-Features " weiter unten in diesem Thema gezeigt

  • Gibt an, ob die Klasse C++-Vorlagen verwendet

  • Gibt an, ob die in der Sammlung gespeicherten Elemente serialisiert werden können.

  • Gibt an, ob die in der Auflistung gespeicherten Elemente für die Diagnose abgebilden werden können.

  • Gibt an, ob die Sammlung typsicher ist.

Die folgende Tabelle, Sammlungs-Shape-Features, fasst die Merkmale der verfügbaren Auflistungs-Shapes zusammen.

  • In den Spalten 2 und 3 werden die Sortier- und Zugriffsmerkmale der einzelnen Shapes beschrieben. In der Tabelle bedeutet der Begriff "sortiert", dass die Reihenfolge, in der Elemente eingefügt und gelöscht werden, ihre Reihenfolge in der Sammlung bestimmt; es bedeutet nicht, dass die Elemente nach ihren Inhalten sortiert werden. Der Begriff "indiziert" bedeutet, dass die Elemente in der Auflistung durch einen ganzzahligen Index abgerufen werden können, ähnlich wie Elemente in einem typischen Array.

  • Die Spalten 4 und 5 beschreiben die Leistung der einzelnen Shapes. Bei Anwendungen, die viele Einfügungen in die Sammlung erfordern, kann die Einfügegeschwindigkeit besonders wichtig sein; für andere Anwendungen kann die Nachschlagegeschwindigkeit wichtiger sein.

  • In Spalte 6 wird beschrieben, ob jede Form doppelte Elemente zulässt.

Sammlungs-Shape-Features

Gestalt Bestellt Indiziert Einfügen eines Elements Nach angegebenem Element suchen Doppelte Elemente
Liste Ja Nein Schnell Langsam Ja
Anordnung Ja Byt Langsam Langsam Ja
Landkarte Nein Nach Taste Schnell Schnell Nein (Schlüssel) Ja (Werte)

In der folgenden Tabelle werden die Merkmale von MFC-Auflistungsklassen als Leitfaden für die Auswahl weitere wichtige Merkmale bestimmter MFC-Auflistungsklassen zusammengefasst. Ihre Wahl hängt möglicherweise davon ab, ob die Klasse auf C++-Vorlagen basiert, ob ihre Elemente über den Dokument serialisierungsmechanismus von MFC serialisiert werden können, ob ihre Elemente über den Diagnosedumpingmechanismus von MFC gedumpt werden können oder ob die Klasse typsicher ist – d. h., ob Sie den Typ der elemente garantieren können, die in einer Sammlung basierend auf der Klasse gespeichert und abgerufen werden können.

Merkmale von MFC-Auflistungsklassen

Klasse Verwendet C++

Schablonen
Kann sein

Serialisierten
Kann sein

gedumpt
Ist

Typsicher
CArray Ja Ja 1 Ja 1 Nein
CByteArray Nein Ja Ja Ja 3
CDWordArray Nein Ja Ja Ja 3
CList Ja Ja 1 Ja 1 Nein
CMap Ja Ja 1 Ja 1 Nein
CMapPtrToPtr Nein Nein Ja Nein
CMapPtrToWord Nein Nein Ja Nein
CMapStringToOb Nein Ja Ja Nein
CMapStringToPtr Nein Nein Ja Nein
CMapStringToString Nein Ja Ja Ja 3
CMapWordToOb Nein Ja Ja Nein
CMapWordToPtr Nein Nein Ja Nein
CObArray Nein Ja Ja Nein
CObList Nein Ja Ja Nein
CPtrArray Nein Nein Ja Nein
CPtrList Nein Nein Ja Nein
CStringArray Nein Ja Ja Ja 3
CStringList Nein Ja Ja Ja 3
CTypedPtrArray Ja Hängt von 2 ab Ja Ja
CTypedPtrList Ja Hängt von 2 ab Ja Ja
CTypedPtrMap Ja Hängt von 2 ab Ja Ja
CUIntArray Nein Nein Ja Ja 3
CWordArray Nein Ja Ja Ja 3
  1. Um die Serialisierung zu serialisieren, müssen Sie die Funktion des Auflistungsobjekts Serialize explizit aufrufen. Zum Abbilden müssen Sie seine Dump Funktion explizit aufrufen. Sie können das Formular ar << collObj nicht zum Serialisieren oder zum Abbilden des Formulars dmp<< collObj verwenden.

  2. Die Serialisierbarkeit hängt vom zugrunde liegenden Sammlungstyp ab. Wenn z. B. ein typisierter Zeigerarray basiert CObArray, ist es serialisierbar; wenn es auf CPtrArrayder Grundlage erfolgt, ist es nicht serialisierbar. Im Allgemeinen können die Ptr-Klassen nicht serialisiert werden.

  3. Wenn in dieser Spalte "Ja" markiert ist, ist eine Nichtvorlagensammlungsklasse typsicher, sofern Sie sie wie vorgesehen verwenden. Wenn Sie beispielsweise Bytes in einem CByteArraySpeicher speichern, ist das Array typsicher. Wenn Sie es jedoch zum Speichern von Zeichen verwenden, ist die Typsicherheit weniger sicher.

Siehe auch

Auflistungen
Template-Based Klassen
How to: Make a Type-Safe Collection
Zugreifen auf alle Elemente einer Auflistung