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 |
Pour sérialiser, vous devez appeler explicitement la fonction
Serialize
de l’objet de collection. Pour vider, vous devez appeler explicitement sa fonctionDump
. Vous ne pouvez pas utiliser la formear << collObj
pour sérialiser ou la formedmp
<< collObj
pour faire un dump.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é surCPtrArray
, il n’est pas sérialisable. En général, les classes « Ptr » ne peuvent pas être sérialisées.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