La classe priority_queue
Classe d’adaptateur de conteneur de modèle qui fournit une restriction de fonctionnalité limitant l’accès à l’élément supérieur d’un certain type de conteneur sous-jacent, qui est toujours le plus grand ou de la priorité la plus élevée. De nouveaux éléments peuvent être ajoutés à l’élément priority_queue
supérieur de celui-ci priority_queue
ou être inspectés ou supprimés.
Syntaxe
template <class Type, class Container= vector <Type>, class Compare= less <typename Container ::value_type>>
class priority_queue
Paramètres
Type
Type de données d'élément à stocker dans le priority_queue
.
Container
Type du conteneur sous-jacent utilisé pour implémenter le priority_queue
.
Compare
Type qui fournit un objet de fonction qui peut comparer deux valeurs d’élément en tant que clés de tri pour déterminer leur ordre relatif dans le priority_queue
. Cet argument est facultatif et le prédicat binaire less<typename Container::value_type>
est la valeur par défaut.
Notes
Les éléments de classe Type
stipulés dans le premier paramètre de modèle d’un objet file d’attente sont synonymes value_type
et doivent correspondre au type d’élément dans la classe Container
de conteneur sous-jacente stipulée par le deuxième paramètre de modèle. Il Type
doit être assignable, afin qu’il soit possible de copier des objets de ce type et d’affecter des valeurs à des variables de ce type.
Commande priority_queue
la séquence qu’il contrôle en appelant un objet de fonction stockée de classe Traits
. En général, les éléments doivent être simplement moins que comparables pour établir cet ordre : pour que, compte tenu de deux éléments, il peut être déterminé qu’ils sont équivalents (dans le sens où aucun n’est inférieur à l’autre) ou qu’un élément est inférieur à l’autre. Cela entraîne le tri des éléments non équivalents. D’un point de vue plus technique, la fonction de comparaison est un prédicat binaire qui induit un ordre faible strict au sens mathématique du terme.
Classes de conteneur sous-jacentes appropriées pour priority_queue
inclure deque
la classe et la classe par défautvector
ou tout autre conteneur de séquence qui prend en charge les opérations de front
, push_back
et pop_back
un itérateur d’accès aléatoire. La classe de conteneur sous-jacent est encapsulée dans l'adaptateur de conteneur, qui expose seulement l'ensemble limité de fonctions membres du conteneur de séquence comme une interface publique.
L’ajout et la suppression d’éléments dans une classe priority_queue
présentent une complexité logarithmique. L’accès aux éléments dans une classe priority_queue
présente une complexité constante.
Il existe trois types d’adaptateurs de conteneur définis par la bibliothèque standard C++ : stack
, queue
et priority_queue
. Chaque type limite les fonctionnalités d’une classe de conteneur sous-jacent pour fournir une interface contrôlée de façon précise à une structure de données standard.
La
stack
classe prend en charge une structure de données liFO (last-in, first-out). Une bonne analogie à avoir à l'esprit est celle d'une pile d'assiettes. Les éléments (les assiettes) peuvent être insérés, inspectés ou supprimés seulement à partir du haut de la pile, qui est le dernier élément à la fin du conteneur de base. La restriction d’accès uniquement à l’élément supérieur est la raison d’utiliser lastack
classe.La
queue
classe prend en charge une structure de données fiFO (first-out) de première entrée. Une bonne analogie à avoir à l'esprit est celle de personnes faisant la file pour un employé de banque. Les éléments (les personnes) peuvent être ajoutés à l'arrière de la file et ils sont supprimés de l'avant de la file. Le début et la fin d'une file peuvent être inspectés. La restriction d’accès uniquement aux éléments front et back de cette façon est la raison de l’utilisation de laqueue
classe.La
priority_queue
classe trie ses éléments afin que le plus grand élément soit toujours à la position supérieure. Elle prend en charge l'insertion d'un élément, et l'inspection et la suppression de l'élément du haut. Un bon analogue à garder à l’esprit serait les gens qui s’alignent là où ils sont disposés par âge, hauteur ou un autre critère.
Constructeurs
Constructeur | Description |
---|---|
priority_queue |
Construit un priority_queue qui est vide ou qui est une copie d’une plage d’un objet conteneur de base ou d’un autre priority_queue . |
Typedefs
Nom de type | Description |
---|---|
container_type |
Type qui fournit le conteneur de base à adapter par un objet priority_queue . |
size_type |
Type entier non signé qui peut représenter le nombre d'éléments dans un priority_queue . |
value_type |
Type qui représente le type d'objet stocké en tant qu'élément dans un objet priority_queue . |
Fonctions Membre
Fonction membre | Description |
---|---|
empty |
Vérifie si l'objet priority_queue est vide. |
pop |
Supprime l’élément le plus grand en haut du priority_queue . |
push |
Ajoute un élément à la file d’attente de priorité en fonction de la priorité de l’élément de operator< . |
size |
Retourne le nombre d'éléments d'un priority_queue . |
top |
Retourne une référence const à l’élément le plus grand en haut du priority_queue . |
Spécifications
En-tête : <queue>
Espace de noms : std
priority_queue::container_type
Type qui fournit le conteneur de base à adapter.
typedef Container container_type;
Notes
Le type est un synonyme du paramètre de modèle Container
. La classe deque
de conteneur de séquence de bibliothèque standard C++ et la classe vector
par défaut répondent aux exigences à utiliser comme conteneur de base pour un priority_queue
objet. Les types définis par l’utilisateur peuvent également être utilisés s’ils remplissent les conditions.
Pour plus d’informations sur Container
, consultez la section Remarques de la priority_queue
rubrique Classe .
Exemple
Consultez l’exemple pour priority_queue
obtenir un exemple de déclaration et d’utilisation container_type
.
priority_queue::empty
Vérifie si un priority_queue
est vide.
bool empty() const;
Valeur de retour
true
si la priority_queue
valeur est vide ; false
si elle priority_queue
n’est pas vide.
Exemple
// pqueue_empty.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
// Declares priority_queues with default deque base container
priority_queue <int> q1, s2;
q1.push( 1 );
if ( q1.empty( ) )
cout << "The priority_queue q1 is empty." << endl;
else
cout << "The priority_queue q1 is not empty." << endl;
if ( s2.empty( ) )
cout << "The priority_queue s2 is empty." << endl;
else
cout << "The priority_queue s2 is not empty." << endl;
}
The priority_queue q1 is not empty.
The priority_queue s2 is empty.
priority_queue::pop
Supprime l’élément le plus grand en haut du priority_queue
.
void pop();
Notes
Il priority_queue
doit être vide pour appliquer la fonction membre. Le haut du conteneur priority_queue
est toujours occupé par le plus grand élément du conteneur.
Exemple
// pqueue_pop.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
priority_queue <int> q1, s2;
q1.push( 10 );
q1.push( 20 );
q1.push( 30 );
priority_queue <int>::size_type i, iii;
i = q1.size( );
cout << "The priority_queue length is " << i << "." << endl;
const int& ii = q1.top( );
cout << "The element at the top of the priority_queue is "
<< ii << "." << endl;
q1.pop( );
iii = q1.size( );
cout << "After a pop, the priority_queue length is "
<< iii << "." << endl;
const int& iv = q1.top( );
cout << "After a pop, the element at the top of the "
<< "priority_queue is " << iv << "." << endl;
}
The priority_queue length is 3.
The element at the top of the priority_queue is 30.
After a pop, the priority_queue length is 2.
After a pop, the element at the top of the priority_queue is 20.
priority_queue::priority_queue
Construit un priority_queue
objet vide ou qui est une copie d’une plage d’un objet conteneur de base ou d’un autre priority_queue
.
priority_queue();
explicit priority_queue(const Traits& _comp);
priority_queue(const Traits& _comp, const container_type& _Cont);
priority_queue(const priority_queue& right);
template <class InputIterator>
priority_queue(InputIterator first, InputIterator last);
template <class InputIterator>
priority_queue(InputIterator first, InputIterator last, const Traits& _comp);
template <class InputIterator>
priority_queue(InputIterator first, InputIterator last, const Traits& _comp, const container_type& _Cont);
Paramètres
_comp
Fonction de comparaison de type constTraits
utilisée pour classer les éléments dans le priority_queue
, qui par défaut compare la fonction du conteneur de base.
_Cont
Conteneur de base dont la construction priority_queue
doit être une copie.
right
Dont priority_queue
l’ensemble construit doit être une copie.
first
Position du premier élément de la plage d'éléments à copier.
last
Position du premier élément au-delà de la plage d'éléments à copier.
Notes
Chacun des trois premiers constructeurs spécifie un initial priority_queue
vide, le second spécifiant également le type de fonction de comparaison (comp
) à utiliser pour établir l’ordre des éléments et le troisième spécifiant explicitement le container_type
(_Cont
) à utiliser. Le mot clé explicit
supprime certains genres de conversions de type automatiques.
Le quatrième constructeur spécifie une copie du priority_queue right
.
Les trois derniers constructeurs copient la plage [first, last)
de certains conteneurs et utilisent les valeurs pour initialiser un avec une priority_queue
précision croissante dans la spécification du type de fonction de comparaison de classe Traits
et container_type
.
Exemple
// pqueue_ctor.cpp
// compile with: /EHsc
#include <queue>
#include <vector>
#include <deque>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
// The first member function declares priority_queue
// with a default vector base container
priority_queue <int> q1;
cout << "q1 = ( ";
while ( !q1.empty( ) )
{
cout << q1.top( ) << " ";
q1.pop( );
}
cout << ")" << endl;
// Explicitly declares a priority_queue with nondefault
// deque base container
priority_queue <int, deque <int> > q2;
q2.push( 5 );
q2.push( 15 );
q2.push( 10 );
cout << "q2 = ( ";
while ( !q2.empty( ) )
{
cout << q2.top( ) << " ";
q2.pop( );
}
cout << ")" << endl;
// This method of printing out the elements of a priority_queue
// removes the elements from the priority queue, leaving it empty
cout << "After printing, q2 has " << q2.size( ) << " elements." << endl;
// The third member function declares a priority_queue
// with a vector base container and specifies that the comparison
// function greater is to be used for ordering elements
priority_queue <int, vector<int>, greater<int> > q3;
q3.push( 2 );
q3.push( 1 );
q3.push( 3 );
cout << "q3 = ( ";
while ( !q3.empty( ) )
{
cout << q3.top( ) << " ";
q3.pop( );
}
cout << ")" << endl;
// The fourth member function declares a priority_queue and
// initializes it with elements copied from another container:
// first, inserting elements into q1, then copying q1 elements into q4
q1.push( 100 );
q1.push( 200 );
priority_queue <int> q4( q1 );
cout << "q4 = ( ";
while ( !q4.empty( ) )
{
cout << q4.top( ) << " ";
q4.pop( );
}
cout << ")" << endl;
// Creates an auxiliary vector object v5 to be used to initialize q5
vector <int> v5;
vector <int>::iterator v5_Iter;
v5.push_back( 10 );
v5.push_back( 30 );
v5.push_back( 20 );
cout << "v5 = ( " ;
for ( v5_Iter = v5.begin( ) ; v5_Iter != v5.end( ) ; v5_Iter++ )
cout << *v5_Iter << " ";
cout << ")" << endl;
// The fifth member function declares and
// initializes a priority_queue q5 by copying the
// range v5[ first, last) from vector v5
priority_queue <int> q5( v5.begin( ), v5.begin( ) + 2 );
cout << "q5 = ( ";
while ( !q5.empty( ) )
{
cout << q5.top( ) << " ";
q5.pop( );
}
cout << ")" << endl;
// The sixth member function declares a priority_queue q6
// with a comparison function greater and initializes q6
// by copying the range v5[ first, last) from vector v5
priority_queue <int, vector<int>, greater<int> >
q6( v5.begin( ), v5.begin( ) + 2 );
cout << "q6 = ( ";
while ( !q6.empty( ) )
{
cout << q6.top( ) << " ";
q6.pop( );
}
cout << ")" << endl;
}
priority_queue::push
Ajoute un élément à la file d’attente de priorité en fonction de la priorité de l’élément de operator<
.
void push(const Type& val);
Paramètres
val
Élément ajouté en haut du priority_queue
.
Notes
La partie supérieure est priority_queue
la position occupée par le plus grand élément du conteneur.
Exemple
// pqueue_push.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
priority_queue<int> q1;
q1.push( 10 );
q1.push( 30 );
q1.push( 20 );
priority_queue<int>::size_type i;
i = q1.size( );
cout << "The priority_queue length is " << i << "." << endl;
const int& ii = q1.top( );
cout << "The element at the top of the priority_queue is "
<< ii << "." << endl;
}
The priority_queue length is 3.
The element at the top of the priority_queue is 30.
priority_queue::size
Retourne le nombre d'éléments d'un priority_queue
.
size_type size() const;
Valeur de retour
Longueur actuelle du priority_queue
.
Exemple
// pqueue_size.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
priority_queue <int> q1, q2;
priority_queue <int>::size_type i;
q1.push( 1 );
i = q1.size( );
cout << "The priority_queue length is " << i << "." << endl;
q1.push( 2 );
i = q1.size( );
cout << "The priority_queue length is now " << i << "." << endl;
}
The priority_queue length is 1.
The priority_queue length is now 2.
priority_queue::size_type
Type entier non signé qui peut représenter le nombre d'éléments dans un priority_queue
.
typedef typename Container::size_type size_type;
Notes
Le type est un synonyme du size_type
conteneur de base adapté par le priority_queue
.
Exemple
Consultez l’exemple pour size
obtenir un exemple de déclaration et d’utilisation size_type
.
priority_queue::top
Retourne une référence const à l’élément le plus grand en haut du priority_queue
.
const_reference top() const;
Valeur de retour
Référence au plus grand élément, tel que déterminé par la Traits
fonction, objet du priority_queue
.
Notes
Il priority_queue
doit être vide pour appliquer la fonction membre.
Exemple
// pqueue_top.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
priority_queue<int> q1;
q1.push( 10 );
q1.push( 30 );
q1.push( 20 );
priority_queue<int>::size_type i;
i = q1.size( );
cout << "The priority_queue length is " << i << "." << endl;
const int& ii = q1.top( );
cout << "The element at the top of the priority_queue is "
<< ii << "." << endl;
}
The priority_queue length is 3.
The element at the top of the priority_queue is 30.
priority_queue::value_type
Type qui représente le type d'objet stocké en tant qu'élément dans un objet priority_queue
.
typedef typename Container::value_type value_type;
Notes
Le type est un synonyme du value_type
conteneur de base adapté par le priority_queue
.
Exemple
// pqueue_value_type.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
// Declares priority_queues with default deque base container
priority_queue<int>::value_type AnInt;
AnInt = 69;
cout << "The value_type is AnInt = " << AnInt << endl;
priority_queue<int> q1;
q1.push( AnInt );
cout << "The element at the top of the priority_queue is "
<< q1.top( ) << "." << endl;
}
The value_type is AnInt = 69
The element at the top of the priority_queue is 69.
Voir aussi
Sécurité des threads dans la bibliothèque C++ Standard
Informations de référence sur la bibliothèque standard C++