Maison >développement back-end >C++ >À quelles exigences clés une classe doit-elle répondre pour être utilisée comme clé dans un `std::map` ?

À quelles exigences clés une classe doit-elle répondre pour être utilisée comme clé dans un `std::map` ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-02 01:29:09793parcourir

What Key Requirements Must a Class Meet to Be Used as a Key in a `std::map`?

Exigences clés pour std::map

Pour qu'une classe soit une clé valide dans une bibliothèque standard std::map, il doit répondre à des exigences spécifiques. Ces exigences garantissent que les clés peuvent être commandées et comparées de manière fiable au sein de la carte.

  • Copiabilité et assignabilité : Les clés doivent être copiables et attribuables. Cela permet à std::map de créer des copies de clés pour la comparaison et le stockage interne.
  • Opérateur de comparaison : Les clés doivent implémenter un opérateur de comparaison, généralement implémenté sous la forme d'un < (inférieur à) ou > (supérieur à) opérateur. Cet opérateur permet à std::map de déterminer l'ordre relatif des clés, ce qui est essentiel pour maintenir la nature triée de la carte.
  • Ordre strict : L'opérateur de comparaison doit définir un ordre strict . Pour deux clés a et b, si a < b, puis b > ; un. Si un < b et b &Lt ; c, puis un &Lt ; c doit également être vrai.

Implémentation de clé personnalisée

Si la classe que vous souhaitez utiliser comme clé ne répond pas à ces exigences, vous pouvez créer un classe wrapper qui hérite de la classe d’origine et implémente les opérateurs nécessaires. Ceci est utile lorsque la classe d'origine ne peut pas être modifiée ou ne fournit pas d'opérateur de comparaison approprié.

Ce qui suit est un exemple d'encapsuleur de clé personnalisé qui implémente un opérateur de comparaison pour une structure simple :

struct MyType {
    // ... original class members
};

struct MyTypeWrapper {
    MyType original;

    bool operator<(const MyTypeWrapper& other) const {
        // ... custom comparison logic
    }
};

En utilisant MyTypeWrapper comme clé, vous pouvez mapper des objets de la classe MyType tout en vous assurant que l'ordre de la carte est correctement conservé.

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