Maison >développement back-end >C++ >La fonction de tri de la bibliothèque standard peut-elle trier les types définis par l'utilisateur en fonction de champs spécifiques ?

La fonction de tri de la bibliothèque standard peut-elle trier les types définis par l'utilisateur en fonction de champs spécifiques ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-11 12:13:03801parcourir

Can the Standard Library Sort Function Sort User-Defined Types Based on Specific Fields?

Tri des types définis par l'utilisateur avec le tri de la bibliothèque standard

Question :

La norme peut-elle La fonction de tri de la bibliothèque peut être utilisée pour trier un vecteur de structures définies par l'utilisateur en fonction d'un champ spécifique dans le structs ?

Exemple :

struct MyType {
    int a;
    int b;
};

vector<MyType> moo;

// Insert data into moo...

// Sort moo by the value of the 'a' field

Réponse :

Oui, la fonction de tri de bibliothèque standard peut gérer ce scénario si le type défini par l'utilisateur répond à des exigences spécifiques :

  1. Opérateur de comparaison Surcharge : Le type doit implémenter l'opérateur de comparaison surchargé bool Operator<(const MyType& other) const pour spécifier comment les instances du type sont comparées.
  2. Constructeur de copie : Une copie le constructeur (généré par le compilateur ou personnalisé) doit existent.

Mise en œuvre :

struct MyType {
    int a;
    int b;

    bool operator<(const MyType&amp; other) const {
        // Implementation that compares the 'a' fields
    }

    // Copy constructor
    MyType(const MyType&amp; other)
        : a(other.a), b(other.b) { }

    // Other constructors...
};

Approche alternative utilisant une fonction de commande :

En cas de surcharge du l'opérateur de comparaison n'est pas réalisable, une fonction de tri ou un foncteur peut être utilisé à la place comme troisième argument du tri fonction.

bool type_is_less(const MyType&amp; t1, const MyType&amp; t2) {
    // Comparison logic
}

std::sort(c.begin(), c.end(), type_is_less);

Cette approche peut être bénéfique dans les cas où :

  • La surcharge de l'opérateur de comparaison n'est pas souhaitée.
  • Les types intégrés ou de pointeur doivent à trier.
  • Plusieurs critères de tri sont requis.

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