10
votes

STL Priority_Queue de C ++ avec structure

Comment pouvons-nous utiliser stl priority_queue pour struct? Toute illustration de poussée et de sautilation, où la struct a plusieurs types de données? de
Dire: structure chose {int a; Char b;} verre [10]; . Comment puis-je mettre cette structure sur priority_queue à l'aide de "int A" pour la commande?


0 commentaires

3 Réponses :


32
votes

voici une réponse légèrement modifiée à votre question originale, qui Vous avez supprimé sans raison apparente. L'original contenait suffisamment d'informations pour que vous puissiez comprendre cela, mais cela va ici: fournir une comparaison inférieure à la comparaison qui utilise le int à comparaison.

Tout ce que vous avez à faire est de fournir un cocceur qui implémente une comparaison moins que la comparaison avec une forte commande stricte, ou un opérateur moins que d'opérateur pour votre classe la mise en œuvre. Cette structure satisfait aux exigences: xxx

puis xxx


3 commentaires

Merci ^ _ ^ & Juste 1 dernière chose: comment vais-je pousser dire (3, a) à la file d'attente DIRECLTY? Je ne sais pas comment mettre (3, a) à "chose truc = ... ".


Dans C ++ 11, vous pouvez dire q.push (chose {42, 'x'}) ou q.emplace (42, 'x') . Si vous n'avez pas de support C ++ 11, vous devez donner une chose un constructeur.


Est-il nécessaire que l'argument soit une référence de const? Pourquoi ne pouvons-nous pas simplement faire l'opérateur de Bool <(chose rhs)?



5
votes

Surcharge Opérateur pour Chose code>:

struct thing
{
    int a;
    char b;

    bool operator<(const thing &o) const
    {
        return a < o.a;
    }
};

priority_queue<thing> pq;

thing t1, t2, t3;

// ...

pq.push(t1);
pq.push(t2);

// ...

t3 = pq.top();
pq.pop();


0 commentaires

2
votes

Vous devez implémenter une fonction de comparaison ou un opérateur de surcharge pour indiquer la queue prioritaire sur laquelle vous souhaitez trier vos données personnalisées. Lorsque la file d'attente prioritaire trier vos données, il aura besoin d'un moyen de savoir comparer entre eux. Vous devez spécifier cela en faisant passer une fonction à la file d'attente prioritaire ou à la surcharge de la classe de données personnalisée ou de la structure.

Vous pouvez vérifier Cette répond. Ce pourrait vous aider. J'ai essayé d'expliquer plusieurs façons d'utiliser une file d'attente prioritaire pour les types de données personnalisés.


0 commentaires