Partager via


Recommandations relatives au choix d’une classe de collection

Cet article contient des informations détaillées visant à vous aider à choisir une classe de collection adaptée aux besoins de votre application.

Votre choix de classe de collection dépend de plusieurs facteurs, notamment :

  • Les fonctionnalités de la forme de classe : ordre, indexation et performances, comme indiqué dans le tableau Fonctionnalités des formes de collection plus loin dans cette rubrique.

  • Si la classe utilise des modèles C++

  • Si les éléments stockés dans la collection peuvent être sérialisés

  • Si les éléments stockés dans la collection peuvent faire l'objet d'un dump pour effectuer des diagnostics

  • Si la collection est de type sécurisé

Le tableau suivant, Fonctionnalités des formes de collection, résume les caractéristiques des formes de collection disponibles.

  • Les colonnes 2 et 3 décrivent les caractéristiques d’accès et de classement de chaque forme. Dans le tableau, le terme « ordonné » signifie que l’ordre dans lequel les éléments sont insérés et supprimés détermine leur ordre dans la collection. Il ne signifie pas que les éléments sont triés en fonction de leur contenu. Le terme « indexé » signifie que les éléments de la collection peuvent être récupérés par un index entier, comme les éléments d’un tableau standard.

  • Les colonnes 4 et 5 décrivent les performances de chaque forme. Dans les applications qui nécessitent de nombreuses insertions dans la collection, la vitesse d’insertion peut être particulièrement importante. Pour d’autres applications, la vitesse de recherche peut être plus importante.

  • La colonne 6 indique si chaque forme autorise des éléments en double.

Fonctionnalités des formes de collection

Forme Ordered (Validée) Indexé Insérer un élément Rechercher un élément spécifié Éléments dupliqués
Liste Oui No Rapides Lentes Oui
Tableau Oui Par entier Lente Lente Oui
Mappage Non Par clé Rapide Rapide Non (clés) Oui (valeurs)

Le tableau suivant, Caractéristiques des classes de collection MFC, résume d’autres caractéristiques importantes de classes de collection MFC spécifiques afin de faciliter la sélection. Votre choix peut différer selon que la classe est basée sur des modèles C++, que ses éléments peuvent être sérialisés par le biais du mécanisme de sérialisation du document MFC, que ses éléments peuvent être vidés par le biais du mécanisme de vidage de diagnostic du document MFC, ou que la classe est de type sécurisé (autrement dit, si vous pouvez garantir le type des éléments stockés dans une collection et récupérés à partir d’une collection d’après la classe).

Caractéristiques des classes de collection MFC

Classe Utilise des modèles

templates
Peut être

sérialisée
Peut être

vidée
Est

de type sécurisé
CArray Oui Oui 1 Oui 1 Non
CByteArray Non Oui Oui Oui 3
CDWordArray Non Oui Oui Oui 3
CList Oui Oui 1 Oui 1 Non
CMap Oui Oui 1 Oui 1 Non
CMapPtrToPtr Pas de Non Oui No
CMapPtrToWord Pas de Non Oui No
CMapStringToOb Non Oui Oui No
CMapStringToPtr Pas de Non Oui No
CMapStringToString Non Oui Oui Oui 3
CMapWordToOb Non Oui Oui No
CMapWordToPtr Pas de Non Oui No
CObArray Non Oui Oui No
CObList Non Oui Oui No
CPtrArray Pas de Non Oui No
CPtrList Pas de Non Oui No
CStringArray Non Oui Oui Oui 3
CStringList Non Oui Oui Oui 3
CTypedPtrArray Oui Selon le cas 2 Oui Oui
CTypedPtrList Oui Selon le cas 2 Oui Oui
CTypedPtrMap Oui Selon le cas 2 Oui Oui
CUIntArray No Non Oui Oui 3
CWordArray Non Oui Oui Oui 3
  1. Pour sérialiser, vous devez appeler explicitement la fonction Serialize de l’objet de collection. Pour vider, vous devez appeler explicitement sa fonction Dump. Vous ne pouvez pas utiliser la forme ar << collObj pour sérialiser ou la forme dmp<< collObj pour faire un dump.

  2. La capacité à sérialiser varie en fonction du type de collection sous-jacent. Par exemple, si un tableau de pointeurs typés est basé sur CObArray, il est sérialisable. S’il est basé sur CPtrArray, il n’est pas sérialisable. En général, les classes « Ptr » ne peuvent pas être sérialisées.

  3. Si Oui est indiqué dans cette colonne, une classe de collection qui n’est pas basée sur un modèle est de type sécurisé si vous l’utilisez comme prévu. Par exemple, si vous stockez des octets dans un CByteArray, le tableau est de type sécurisé. En revanche, si vous l’utilisez pour stocker des caractères, la sécurité de type est plus incertaine.

Voir aussi

Regroupements
Classes basées sur un modèle
Guide pratique pour définir une collection de type sécurisé
Accès à tous les membres d’une collection