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
Libérer: 2024-11-11 12:13:03
original
875 Les gens l'ont consulté

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

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

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

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 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