Maison développement back-end C++ Tas et file d'attente prioritaire en C++

Tas et file d'attente prioritaire en C++

Aug 22, 2023 pm 04:16 PM
c++ 优先队列

Tas et file dattente prioritaire en C++

Le tas et la file d'attente prioritaire sont des structures de données couramment utilisées en C++, et elles ont toutes deux une valeur d'application importante. Cet article présentera et analysera respectivement le tas et la file d'attente prioritaire pour aider les lecteurs à mieux les comprendre et les utiliser.

1. Heap

Le tas est une structure de données arborescente spéciale qui peut être utilisée pour implémenter des files d'attente prioritaires. Dans le tas, chaque nœud satisfait les propriétés suivantes :

  1. Sa valeur n'est pas inférieure (ou pas supérieure) à la valeur de son nœud parent.
  2. Ses sous-arbres gauche et droit forment également un tas.

Nous appelons un tas qui n'est pas plus petit que son nœud parent un « tas min » et un tas qui n'est pas plus grand que son nœud parent un « tas max ». De plus, le tas est généralement un arbre binaire complet, c'est-à-dire que les nœuds des autres niveaux sont pleins, à l'exception du dernier niveau, où les nœuds sont disposés de gauche à droite.

En C++, la bibliothèque STL fournit deux classes, heap et priorité_queue, pour implémenter le tas. Parmi elles, la classe tas fournit des fonctions d'opération de tas, telles que make_heap, push_heap, pop_heap, etc., et la classe priorité_queue est une file d'attente prioritaire basée sur l'implémentation du tas. Examinons ensuite l'utilisation de tas et de priorité_queue.

  1. classe de tas

(1) Créer un tas

Avant de créer un tas, vous devez créer un tableau de type vectoriel pour stocker les nombres à trier :

vecteur 4, 1, 5, 9, 2, 6, 5, 3 };

Ensuite, nous pouvons utiliser la fonction make_heap pour convertir le tableau de type vectoriel en tas :

make_heap(v.begin(), v.end (), Greater());

Parmi eux, Greater() représente une fonction de comparaison qui peut contrôler le type de tas.

(2) Insérer des éléments

Pour insérer des éléments dans le tas, vous pouvez utiliser la fonction push_heap Son utilisation est la suivante :

v.push_back(7);
push_heap(v.begin(), v.end. (), Greater());

(3) Supprimer des éléments

Pour supprimer des éléments du tas, vous pouvez utiliser la fonction pop_heap, qui déplacera l'élément supérieur du tas vers la dernière position du tas. et supprimez l'élément du tas. L'utilisation de cette fonction est la suivante :

pop_heap(v.begin(), v.end(), Greater());
v.pop_back();

  1. priority_queue class

(1 ) Créer un tas

Contrairement à la classe heap, la classe priorité_queue peut spécifier le type de tas lors de la déclaration de l'objet, comme suit :

priority_queue, Greater> signifie créer un tas minimum .

(2) Insérer des éléments

L'insertion d'éléments dans priorité_queue peut utiliser directement la fonction push, comme indiqué ci-dessous :

q.push(2);

q.push(4); q.push(9);


(3) Supprimer des éléments

Pour supprimer des éléments dans priorité_queue, vous pouvez directement utiliser la fonction pop, comme indiqué ci-dessous :

q.pop();

2. La file d'attente prioritaire est une file d'attente spéciale qui trie les éléments en fonction de leur priorité, en plaçant les éléments ayant la priorité la plus élevée en début de file d'attente et les éléments ayant la priorité la plus basse à la fin de la file d'attente. Vous pouvez utiliser un tas pour implémenter une file d'attente prioritaire.

En C++, la classe priorité_queue est une file d'attente prioritaire implémentée basée sur le tas. Elle peut utiliser les fonctions des classes de tas et de priorité_queue ci-dessus pour effectuer des opérations d'insertion et de suppression d'éléments. De plus, la fonction top est également fournie dans la classe priorité_queue, qui est utilisée pour accéder à l'élément ayant la priorité la plus élevée, comme indiqué ci-dessous :

priority_queue q;

q.push(2);

q.push (4);

q .push(1);

q.push(9);

cout
Résumé :

Cet article présente le tas et la priorité dans la file d'attente C++, et analysé les principes d'utilisation et de mise en œuvre du tas et de la file d'attente prioritaire respectivement. En étudiant cet article, les lecteurs peuvent mieux comprendre ces deux structures de données et les utiliser de manière flexible dans la programmation réelle. Dans le même temps, les lecteurs doivent prêter attention au timing et aux précautions d'utilisation du tas et de la file d'attente prioritaire afin de garantir l'exactitude et l'efficacité du code.

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment implémenter le Strategy Design Pattern en C++ ? Comment implémenter le Strategy Design Pattern en C++ ? Jun 06, 2024 pm 04:16 PM

Les étapes pour implémenter le modèle de stratégie en C++ sont les suivantes : définir l'interface de stratégie et déclarer les méthodes qui doivent être exécutées. Créez des classes de stratégie spécifiques, implémentez l'interface respectivement et fournissez différents algorithmes. Utilisez une classe de contexte pour contenir une référence à une classe de stratégie concrète et effectuer des opérations via celle-ci.

Similitudes et différences entre Golang et C++ Similitudes et différences entre Golang et C++ Jun 05, 2024 pm 06:12 PM

Golang et C++ sont respectivement des langages de programmation de garbage collection et de gestion manuelle de la mémoire, avec des systèmes de syntaxe et de type différents. Golang implémente la programmation simultanée via Goroutine et C++ l'implémente via des threads. La gestion de la mémoire Golang est simple et le C++ offre de meilleures performances. Dans les cas pratiques, le code Golang est plus concis et le C++ présente des avantages évidents en termes de performances.

Comment implémenter la gestion des exceptions imbriquées en C++ ? Comment implémenter la gestion des exceptions imbriquées en C++ ? Jun 05, 2024 pm 09:15 PM

La gestion des exceptions imbriquées est implémentée en C++ via des blocs try-catch imbriqués, permettant de déclencher de nouvelles exceptions dans le gestionnaire d'exceptions. Les étapes try-catch imbriquées sont les suivantes : 1. Le bloc try-catch externe gère toutes les exceptions, y compris celles levées par le gestionnaire d'exceptions interne. 2. Le bloc try-catch interne gère des types spécifiques d'exceptions, et si une exception hors de portée se produit, le contrôle est confié au gestionnaire d'exceptions externe.

Comment parcourir un conteneur C++ STL ? Comment parcourir un conteneur C++ STL ? Jun 05, 2024 pm 06:29 PM

Pour parcourir un conteneur STL, vous pouvez utiliser les fonctions start() et end() du conteneur pour obtenir la plage de l'itérateur : Vecteur : utilisez une boucle for pour parcourir la plage de l'itérateur. Liste chaînée : utilisez la fonction membre next() pour parcourir les éléments de la liste chaînée. Mappage : obtenez l'itérateur clé-valeur et utilisez une boucle for pour le parcourir.

Comment utiliser l'héritage de modèles C++ ? Comment utiliser l'héritage de modèles C++ ? Jun 06, 2024 am 10:33 AM

L'héritage de modèle C++ permet aux classes dérivées d'un modèle de réutiliser le code et les fonctionnalités du modèle de classe de base, ce qui convient à la création de classes avec la même logique de base mais des comportements spécifiques différents. La syntaxe d'héritage du modèle est : templateclassDerived:publicBase{}. Exemple : templateclassBase{};templateclassDerived:publicBase{};. Cas pratique : création de la classe dérivée Derived, héritage de la fonction de comptage de la classe de base Base et ajout de la méthode printCount pour imprimer le décompte actuel.

Pourquoi une erreur se produit-elle lors de l'installation d'une extension à l'aide de PECL dans un environnement Docker? Comment le résoudre? Pourquoi une erreur se produit-elle lors de l'installation d'une extension à l'aide de PECL dans un environnement Docker? Comment le résoudre? Apr 01, 2025 pm 03:06 PM

Causes et solutions pour les erreurs Lors de l'utilisation de PECL pour installer des extensions dans un environnement Docker Lorsque nous utilisons un environnement Docker, nous rencontrons souvent des maux de tête ...

Comment accéder aux éléments dans le conteneur C++ STL ? Comment accéder aux éléments dans le conteneur C++ STL ? Jun 05, 2024 pm 06:04 PM

Comment accéder aux éléments dans le conteneur C++ STL ? Il existe plusieurs façons de procéder : Parcourir un conteneur : utiliser une boucle for basée sur une plage d'itérateur pour accéder à des éléments spécifiques : utiliser un index (opérateur d'indice []) utiliser une clé (std::map ou std::unordered_map)

Quel est le rôle de char dans les chaînes C Quel est le rôle de char dans les chaînes C Apr 03, 2025 pm 03:15 PM

En C, le type de char est utilisé dans les chaînes: 1. Stockez un seul caractère; 2. Utilisez un tableau pour représenter une chaîne et se terminer avec un terminateur nul; 3. Faire fonctionner via une fonction de fonctionnement de chaîne; 4. Lisez ou sortant une chaîne du clavier.

See all articles