Comment implémenter une file d'attente prioritaire en C ++



Cet article vous fournira des connaissances détaillées et complètes sur la façon d'implémenter une file d'attente de priorités en C ++ avec des exemples.

Une file d'attente prioritaire est un conteneur dans la STL. Il est similaire à la file d'attente à l'exception du fait que chaque élément de la file d'attente prioritaire a une certaine priorité et lorsque nous sortons des éléments de la file d'attente prioritaire, les éléments avec la priorité la plus élevée sont sautés en premier. Comme la file d'attente prioritaire, il existe 10 types de conteneurs différents dans STL . Un conteneur est un objet qui stocke des données. Les conteneurs STL sont implémentés à l'aide de classes de modèles, il est donc facile de les personnaliser pour contenir différents types de données. Dans cet article, nous discuterons en détail de la file d'attente prioritaire et des concepts qui y sont liés. Les pointeurs suivants seront traités dans cet article Priority Queue in C ++,

Passer à cet article sur la file d'attente prioritaire en C ++





Composants de STL

STL se compose de classes de modèles et de fonctions qui peuvent être utilisées comme approche standard pour le stockage et le traitement des données. Parlons des composants de la STL

exemples de programmes applet java avec sortie

Conteneurs- Il existe 10 types de conteneurs définis dans STL et ceux-ci sont regroupés en 3 catégories. Sur ces 3, les files d'attente prioritaires appartiennent à la catégorie du conteneur dérivé. Chaque classe de conteneur a son propre ensemble de fonctions qui peuvent être utilisées pour manipuler les données.



Algorithme - Un algorithme est une méthode utilisée pour traiter les données présentes dans l'objet conteneur. STL fournit de nombreux types d'algorithmes différents qui peuvent être utilisés pour l'initialisation, la recherche, le tri, la fusion, la copie. Les algorithmes sont implémentés à l'aide de fonctions de modèle.

Itérateur- Un itérateur est un objet qui pointe vers un élément du conteneur. Les itérateurs peuvent aider à se déplacer dans le contenu d'un conteneur. Les itérateurs sont comme des pointeurs qui peuvent être incrémentés et décrémentés. Il agit comme un lien entre l'algorithme et le conteneur. Les itérateurs sont utilisés pour manipuler les données stockées dans un conteneur.

Passer à cet article sur la file d'attente prioritaire en C ++



Heaps et file d'attente prioritaire

Comme nous l'avons vu précédemment, Priority Queue appartient à la catégorie des conteneurs dérivés. Les autres membres de cette catégorie sont pile et file d'attente. Ces conteneurs dérivés sont également appelés adaptateurs de conteneur.

La pile, la file d'attente et la file d'attente prioritaire sont appelées conteneurs dérivés car ils sont constitués de conteneurs de séquence différents. Ces conteneurs ne prennent en charge aucun type d'itérateurs, ils ne sont pas utilisés pour la manipulation de données.

Qu'est-ce qu'une file d'attente prioritaire?

En termes simples, c'est un conteneur que nous avons utilisé pour stocker des données. Chaque élément des données stockées se voit attribuer une priorité qui peut nous aider à stocker les données dans un ordre logique.
Syntaxe:priority_queue nom_variable

Il est important d'inclure un fichier d'en-tête dans le programme afin d'utiliser une file d'attente prioritaire.

file dPar exemple, si nous ajoutons 2, 10, 30, 5, 6 dans notre file d'attente prioritaire en utilisant la fonction push, puis faisons apparaître les éléments en utilisant la fonction pop, la sortie sera 30, 10, 6, 5, 2.

D'accord, nous connaissons maintenant le but ou l'utilisation de la file d'attente prioritaire. Mais comment sait-il si 30> 10? Est-ce qu'il fait une sorte de tri? À ce stade, des tas entrent en scène. Pour en savoir plus sur les tas en détail, reportez-vous à cet article.

Heaps - Les tas sont des structures arborescentes. En fonction de la façon dont les nœuds des éléments enfants sont organisés dans un tas par rapport aux nœuds parents, les tas sont subdivisés en 2 parties

un. Tas min. Dans Min Heap, la valeur du nœud parent est inférieure ou égale à la valeur des nœuds enfants.

2. Tas maximum- Dans Max Heap, la valeur du nœud parent est supérieure ou égale à la valeur des nœuds enfants.

Remarque- La file d'attente prioritaire ne trie pas les éléments à l'aide d'un algorithme de tri, mais stocke les données sous la forme d'un tas.

Passer à cet article sur la file d'attente prioritaire en C ++

Impression de tous les éléments d'une file d'attente prioritaire

Après avoir compris les principes fondamentaux de la file d’attente prioritaire, implémentons des programmes pour comprendre les méthodes les plus couramment utilisées avec une file d’attente prioritaire

#include #include en utilisant l'espace de noms std int main () {priority_queue Prior_q Prior_q.push (10) Prior_q.push (30) Prior_q.push (6) Prior_q.push (2) Prior_q.push (15) Prior_q.push (9) Prior_q.push (7) while (Prior_q.empty () == false) {cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

Production:

30 15 10 9 6 2

Dans le programme ci-dessus, nous avons utilisé les fonctions pop (), top () et push () qui sont utilisées la plupart du temps pour gérer une file d'attente prioritaire. Examinons quelques-unes des méthodes que nous pouvons utiliser avec une file d'attente prioritaire

Taille( ): Cette fonction renvoie la taille de la file d'attente prioritaire

vide( ): Cette fonction permet de vérifier si la file d'attente prioritaire est vide ou non. Il renvoie vrai si la file d'attente prioritaire est vide.

poussez( ): Insère un élément dans la file d'attente prioritaire.

pop (): Cette fonction supprime l'élément supérieur de la file d'attente prioritaire qui est l'élément avec la priorité la plus élevée.

swap (): Cette fonction permute les éléments de la file d'attente prioritaire avec une autre file d'attente prioritaire. La fonction prend une file d'attente prioritaire comme paramètre.

emplace (): Cette fonction permet d'ajouter un élément en haut de la file d'attente prioritaire.

Regardons un autre programme.

#include #include en utilisant l'espace de noms std int main () {priority_queue Prior_q Prior_q.push (10) Prior_q.push (30) Prior_q.push (6) Prior_q.push (2) Prior_q.push (15) Prior_q.push (9) Prior_q.push (7) while (Prior_q.empty () == false) {cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

Production:

2 6 7 9 10 15 30

différence entre chef et ansible

Avec cela, nous arrivons à la fin de cet article Priority Queue in C ++. Si vous souhaitez en savoir plus, consultez le par Edureka, une entreprise d'apprentissage en ligne de confiance. Le cours de formation et de certification Java J2EE et SOA d'Edureka est conçu pour vous former aux concepts Java de base et avancés ainsi qu'à divers frameworks Java tels que Hibernate et Spring.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de ce blog et nous vous répondrons dans les plus brefs délais.