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

Comment définir le `

Patricia Arquette
Libérer: 2024-12-22 06:17:31
original
915 Les gens l'ont consulté

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);
}
Copier après la connexion

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);
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal