Maison >développement back-end >C++ >Comment implémenter un ordre strict des faibles `

Comment implémenter un ordre strict des faibles `

Linda Hamilton
Linda Hamiltonoriginal
2024-12-24 01:47:12896parcourir

How to Implement a Strict Weak Ordering `

Comment définir l'opérateur< sur un n-Tuple pour un ordre faible strict

Introduction

L'ordre faible strict est un concept mathématique qui définit une relation entre deux objets. Il spécifie que si les objets x et y sont équivalents, alors f(x, y) et f(y, x) sont faux ; et si a est inférieur à b, alors f(a, b) est vrai et f(b, a) est faux.

Définition des n-Tuples

Pour un n-uplet, l'opérateur< peut être défini pour satisfaire un ordre faible strict en suivant ces conditions :

  • Équivalence : Deux n-uplets sont équivalents s'ils sont égaux dans toutes leurs composantes.
  • Inférieur à : Un n-uplet a est inférieur à un autre n-uplet b si une composante de a est inférieure à la composante correspondante de b.

Implémentation

La définition ci-dessus peut être implémentée en C en suivant les étapes suivantes :

  1. Créer une fonction de comparaison qui renvoie false pour l'équivalence et true pour moins que, selon les conditions ci-dessus.
  2. Fournir une surcharge d'opérateur pour le &Lt ; opérateur utilisant la fonction de comparaison.

Exemple

Pour un 3-tuple, l'opérateur< peut être défini comme suit :

struct Triple {
    int x;
    int y;
    int z;
    bool operator<(const Triple& other) const {
        return (x < other.x) || (y < other.y) || (z < other.z);
    }
};

En utilisant cette définition, deux triplets seraient équivalents s'ils ont des valeurs identiques pour x, y et z. Un triple serait considéré comme inférieur à un autre si l'un de ses composants est inférieur à ceux de l'autre triple.

std::tuple

Alternativement, le std:: La classe tuple fournie par la bibliothèque standard C implémente déjà un ordre strict et faible pour les tuples. Pour en profiter, les tuples peuvent être utilisés sans copier les objets qu'ils contiennent.

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

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