Maison  >  Article  >  développement back-end  >  Ma classe personnalisée peut-elle être utilisée comme clé dans un std::map C ?

Ma classe personnalisée peut-elle être utilisée comme clé dans un std::map C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-23 09:43:13325parcourir

Can My Custom Class Be Used as a Key in a C   std::map?

Utiliser des classes arbitraires comme clés dans std::map

std::map, un composant fondamental de la bibliothèque de modèles standard C, efficacement associe des paires clé-valeur. Lors de l'utilisation de classes personnalisées comme clés, certains critères doivent être remplis pour garantir un fonctionnement valide.

Exigences relatives aux classes de clés

Pour qu'une classe serve de clé valide dans std ::map, elle doit remplir les exigences suivantes :

  1. Copiabilité et cessibilité : Les clés doivent être copiable et assignable, permettant une duplication et une modification efficaces au sein de la carte.
  2. Ordre : L'ordre des éléments dans std::map est déterminé par le troisième argument du modèle ou l'argument du constructeur utilisé. Par défaut, la valeur par défaut est std::less, qui utilise le < opérateur. Cependant, des opérateurs de comparaison personnalisés peuvent être définis pour spécifier des critères de classement alternatifs.

Définition d'opérateurs de comparaison personnalisés

Si l'ordre par défaut ne répond pas à vos exigences, vous peut définir un opérateur de comparaison personnalisé en tant qu'objet fonctionnel. Cet opérateur doit implémenter un ordre strict, ce qui signifie que pour deux clés a et b, les conditions suivantes doivent être remplies :

  • CmpMyType()(a, b) == true implique CmpMyType()(b , a) == false
  • CmpMyType()(a, b) == false et CmpMyType()(b, a) == false implique a == b

En remplissant ces exigences, les classes personnalisées peuvent être utilisées de manière transparente comme clés dans std::map, permettant un classement et une récupération efficaces des valeurs associées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn