Maison >développement back-end >C++ >Comment définir le `

Comment définir le `

Patricia Arquette
Patricia Arquetteoriginal
2024-12-22 06:17:31916parcourir

How to Define the `

Définition de l'opérateur '<' pour un ordre faible strict sur des tuples

Pour qu'un n-tuple satisfasse un ordre faible strict, il doit remplir les critères suivants :

  • Équivalence : deux tuples x et y sont équivalent si ni x < y ni y &Lt ; x est vrai.
  • Asymétrie : si x < y, alors y &Lt ; x ne peut pas être vrai.
  • Transitivité : Si x < y et y &Lt ; z, puis x &Lt ; z.

Alors que la bibliothèque boost propose une classe de tuple prédéfinie avec l'opérateur '<' en adhérant à un ordre faible strict, vous souhaiterez peut-être définir votre propre opérateur pour un contexte spécifique.

Voici comment implémenter l'opérateur '<' manuellement :

struct S
{
     ThingA   a;
     ThingB   b;
};

bool operator<(S const& lhs, S const& rhs)
{
    return std::make_tuple(lhs.a, lhs.b) < std::make_tuple(rhs.a, rhs.b);
}

Dans cet exemple, nous exploitons la fonction std::make_tuple pour créer un tuple à partir des éléments individuels de S sans les copier. Ensuite, nous comparons les tuples à l'aide de l'opérateur générique de comparaison de tuples.

Pour l'opérateur '==', vous pouvez suivre une approche similaire :

bool operator==(S const& lhs, S const& rhs)
{
    return std::make_tuple(lhs.a, lhs.b) == std::make_tuple(rhs.a, rhs.b);
}

N'oubliez pas que ces implémentations supposent que ThingA et ThingB a son propre opérateur '<' et l'opérateur '==' défini pour un ordre faible strict.

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