Maison > développement back-end > C++ > Comment définir un ordre faible strict

Comment définir un ordre faible strict

DDD
Libérer: 2025-01-03 07:56:38
original
629 Les gens l'ont consulté

How to Define a Strict Weak Ordering `

Définition de l'opérateur < pour un ordre faible strict sur un n-tuple

Question :

Comment implémenter le < opérateur pour un n-tuple (par exemple, 3-tuple) qui adhère au concept d'ordre faible strict ?

Réponse :

Comprendre l'ordre faible strict

L'ordre faible strict est une relation mathématique qui définit une comparaison spécifique entre deux objets :

  • Équivalent : Les deux objets sont considérés comme égaux (c'est-à-dire que a < b et b < a sont tous deux faux).
  • Inférieur à : Un objet est considéré comme "inférieur à" l'autre (c'est-à-dire que a < b est vrai et b < a est false).

Mise en œuvre de la < Opérateur

Pour définir le < opérateur pour un n-uplet, vous devez établir les conditions qui déterminent quand un tuple est considéré comme équivalent ou inférieur à un autre. Cela dépend de la structure de données spécifique et de la sémantique de votre tuple.

Exemple avec std::tuple

La classe std::tuple de la bibliothèque standard C implémente un correct &Lt ; opérateur pour un ordre faible strict. Si vous ne parvenez pas à utiliser cette classe, vous pouvez implémenter manuellement votre propre < opérateur :

struct S {
    ThingA a;
    ThingB b;
};

bool operator<(S const& lhs, S const& rhs) {
    return std::tie(lhs.a, lhs.b) < std::tie(rhs.a, rhs.b);
}
Copier après la connexion

Cela suppose que ThingA et ThingB implémentent déjà un ordre faible strict.

Vous pouvez également implémenter l'égalité en utilisant une approche similaire :

bool operator==(S const& lhs, S const& rhs) {
    return std::tie(lhs.a, lhs.b) == std::tie(rhs.a, rhs.b);
}
Copier après la connexion

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!

source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal