Partager via


Utiliser les fonctions STL priority_queue ::(push, pop, empty, top) dans Visual C++

Cet article vous aide à résoudre le problème d’utilisation des priority_queue::pushfonctions , , priority_queue::pop, priority_queue::emptyet priority_queue::size priority_queue::topSTL dans Visual C++.

Version du produit d’origine : Visual C++
Numéro de base de connaissances d’origine : 157623

Résumé

L’exemple de code ci-dessous montre comment utiliser les priority_queue::pushfonctions , , priority_queue::poppriority_queue::empty, et priority_queue::toppriority_queue::size STL dans Visual C++.

L’adaptateur priority_queue contient des objets du type défini par le type de conteneur pris en charge par le priority_queue. Les deux conteneurs pris en charge sont le vector et le deque. Les objets sont insérés par push() et supprimés par pop(). top() retourne l’élément supérieur dans le priority_queue.

Étant donné que les adaptateurs ne prennent pas en charge l’itération, aucun priority_queue itérateur n’est associé.

Priority_queue vous permet de conserver une collection triée d’éléments déterminé par une fonction de comparateur associée, telle que moins, plus grande, etc. L’élément supérieur devient donc le candidat du choix, le plus bas ou le plus élevé en fonction de la fonction choisie.

En-tête requis

<queue>

Prototype

priority_queue::push();
priority_queue::pop();
priority_queue::empty();
priority_queue::top();
priority_queue::size();

Note

Les noms de classe/paramètre dans le prototype peuvent ne pas correspondre à la version dans le fichier d’en-tête. Les pme ont été modifiées pour améliorer la lisibilité.

Exemple de code

L’exemple montre priority_queuel’implémentation à l’aide deque et vector aux conteneurs.

//////////////////////////////////////////////////////////////////////
// Compile options needed: /GX
// <filename> : priority_queue.cpp
// Functions:
// priority_queue::push(), priority_queue::pop(),
// priority_queue::empty(), priority_queue::top(), queue::size()
// of Microsoft Product Support Services,
// Copyright (c) 1996 Microsoft Corporation. All rights reserved.
//////////////////////////////////////////////////////////////////////

#include <iostream>
#include <queue>
#include <deque>
#include <vector>
#include <functional>
using namespace std;

#if _MSC_VER > 1020 // if VC++ version is > 4.2
    using namespace std; // std c++ libs implemented in std
#endif

// Using priority_queue with deque
// Use of function greater sorts the items in ascending order
typedef deque<int, allocator<int> > INTDQU;
typedef priority_queue<int,INTDQU, greater<int> > INTPRQUE;

// Using priority_queue with vector
// Use of function less sorts the items in descending order
typedef vector<char, allocator<char> > CHVECTOR;
typedef priority_queue<char,CHVECTOR,less<char> > CHPRQUE;

void main(void)
{
    int size_q;
    INTPRQUE q;
    CHPRQUE p;

    // Insert items in the priority_queue(uses deque)
    q.push(42);
    q.push(100);
    q.push(49);
    q.push(201);

    // Output the item at the top using top()
    cout << q.top() << endl;
    // Output the size of priority_queue
    size_q = q.size();
    cout << "size of q is:" << size_q << endl;
    // Output items in priority_queue using top()
    // and use pop() to get to next item until
    // priority_queue is empty
    while (!q.empty())
    {
        cout << q.top() << endl;
        q.pop();
    }

    // Insert items in the priority_queue(uses vector)
    p.push('c');
    p.push('a');
    p.push('d');
    p.push('m');
    p.push('h');

    // Output the item at the top using top()
    cout << p.top() << endl;

    // Output the size of priority_queue
    size_q = p.size();
    cout << "size of p is:" << size_q << endl;

    // Output items in `priority_queue`using top()
    // and use pop() to get to next item until
    // `priority_queue`is empty
    while (!p.empty())
    {
        cout << p.top() << endl;
        p.pop();
    }
}

Sortie du programme :

4
size of q is:4
42
49
100
201
m
size of p is:5
m
h
d
c
a