"."/> ".">
recherche
Maisondéveloppement back-endTutoriel C#.NetExplication détaillée de l'utilisation de la file d'attente prioritaire C++

Explication détaillée de l'utilisation de la file d'attente prioritaire C++

Explication détaillée de l'utilisation de la file d'attente prioritaire C++

La file d'attente prioritaire est également un type de structure de données telle qu'une file d'attente. Son fonctionnement ne se limite pas au premier entré, premier sorti de la file d'attente, mais peut également se faire de manière logique (sortie de la file d'attente selon la valeur maximale ou la valeur minimale, etc.).

Apprentissage recommandé : Tutoriel vidéo C++

Une file d'attente normale est une structure de données premier entré, premier sorti. Les éléments sont ajoutés à la fin de la file d'attente et supprimés. de la tête de la file d'attente.

Dans une file d'attente prioritaire, les éléments sont prioritaires. Lors de l'accès aux éléments, l'élément ayant la priorité la plus élevée est supprimé en premier. La file d'attente prioritaire présente les caractéristiques comportementales du premier entré, le plus grand sorti.

Tout d'abord, vous devez inclure le fichier d'en-tête #include. La différence entre celui-ci et la file d'attente est que nous pouvons personnaliser la priorité des données, de sorte que les données avec. la priorité élevée sera mise en file d'attente au début. Obtenez la priorité hors de la file d'attente.

La file d'attente prioritaire possède toutes les fonctionnalités de la file d'attente, y compris les opérations de base de la file d'attente. Elle ajoute simplement un tri interne sur cette base. Elle est essentiellement implémentée sous forme de tas.

Le fonctionnement de base est le même que celui de la file d'attente :

top accède à l'élément de tête de la file d'attente

vide si la file d'attente est vide

size renvoie le nombre d'éléments dans la file d'attente

push Insérer l'élément à la fin de la file d'attente (et trier)

emplace Construire un élément sur place et l'insérer dans la file d'attente

emplace Construire un élément sur place et l'insérer dans la file d'attente

🎜>

pop Pop l'élément en tête de file d'attente

swap Exchange Contentpriority_queue<type container functional></type>

Définition :

Type est le type de données, Container est le type de conteneur (Container doit être un conteneur implémenté avec un tableau, tel que vector, deque, etc., mais il ne peut pas être utilisé comme liste. La valeur par défaut dans STL est vector), et Functional est la méthode de comparaison.

Lorsque vous devez utiliser un type de données personnalisé, vous devez transmettre ces trois paramètres. Lorsque vous utilisez un type de données de base, il vous suffit de transmettre le type de données. La valeur par défaut est un gros tas.

est généralement :

//升序队列
priority_queue <int,vector<int>,greater<int> > q;
//降序队列
priority_queue <int,vector<int>,less<int> >q;

//greater和less是std实现的两个仿函数(就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了)

1 Exemple de file d'attente prioritaire de type de base :

#include<iostream>
#include <queue>
using namespace std;
int main() 
{
    //对于基础类型 默认是大顶堆
    priority_queue<int> a; 
    //等同于 priority_queue<int, vector<int>, less<int> > a;
    
    //      这里一定要有空格,不然成了右移运算符↓↓
    priority_queue<int, vector<int>, greater<int> > c;  //这样就是小顶堆
    priority_queue<string> b;

    for (int i = 0; i < 5; i++) 
    {
        a.push(i);
        c.push(i);
    }
    while (!a.empty()) 
    {
        cout << a.top() << &#39; &#39;;
        a.pop();
    } 
    cout << endl;

    while (!c.empty()) 
    {
        cout << c.top() << &#39; &#39;;
        c.pop();
    }
    cout << endl;

    b.push("abc");
    b.push("abcd");
    b.push("cbd");
    while (!b.empty()) 
    {
        cout << b.top() << &#39; &#39;;
        b.pop();
    } 
    cout << endl;
    return 0;
}

Résultat d'exécution :

4 3 2 1 0
0 1 2 3 4
cbd abcd abc
请按任意键继续. . .

2. Exemple d'utilisation d'une paire comme élément de file d'attente prioritaire :

Règle : Pour une comparaison de paires, comparez d'abord le premier élément, et comparez le deuxième élément si le premier est égal.

#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main() 
{
    priority_queue<pair<int, int> > a;
    pair<int, int> b(1, 2);
    pair<int, int> c(1, 3);
    pair<int, int> d(2, 5);
    a.push(d);
    a.push(c);
    a.push(b);
    while (!a.empty()) 
    {
        cout << a.top().first << &#39; &#39; << a.top().second << &#39;\n&#39;;
        a.pop();
    }
}

Résultat d'exécution :

2 5
1 3
1 2
请按任意键继续. . .

3. Exemple d'utilisation d'un type personnalisé comme élément de file d'attente prioritaire
#include <iostream>
#include <queue>
using namespace std;

//方法1
struct tmp1 //运算符重载<
{
    int x;
    tmp1(int a) {x = a;}
    bool operator<(const tmp1& a) const
    {
        return x < a.x; //大顶堆
    }
};

//方法2
struct tmp2 //重写仿函数
{
    bool operator() (tmp1 a, tmp1 b) 
    {
        return a.x < b.x; //大顶堆
    }
};

int main() 
{
    tmp1 a(1);
    tmp1 b(2);
    tmp1 c(3);
    priority_queue<tmp1> d;
    d.push(b);
    d.push(c);
    d.push(a);
    while (!d.empty()) 
    {
        cout << d.top().x << &#39;\n&#39;;
        d.pop();
    }
    cout << endl;

    priority_queue<tmp1, vector<tmp1>, tmp2> f;
    f.push(b);
    f.push(c);
    f.push(a);
    while (!f.empty()) 
    {
        cout << f.top().x << &#39;\n&#39;;
        f.pop();
    }
}
Résultat d'exécution :
3
2
1
 
3
2
1
请按任意键继续. . .

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
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
C # et le runtime .net: comment ils fonctionnent ensembleC # et le runtime .net: comment ils fonctionnent ensembleApr 19, 2025 am 12:04 AM

C # et .NET Runtime travaillent en étroite collaboration pour permettre aux développeurs de pouvoir de développer des capacités de développement efficaces, puissantes et multiplateformes. 1) C # est un langage de programmation de type et orienté objet conçu pour intégrer de manière transparente avec le framework .NET. 2) Le .NET Runtime gère l'exécution du code C #, fournit une collecte de déchets, des services de sécurité et d'autres services et assure une opération efficace et multiplateforme.

C # .NET DÉVELOPPEMENT: A Guide du débutant pour commencerC # .NET DÉVELOPPEMENT: A Guide du débutant pour commencerApr 18, 2025 am 12:17 AM

Pour démarrer le développement C # .NET, vous devez: 1. Comprendre la connaissance de base de C # et les concepts principaux du .NET Framework; 2. Maître les concepts de base des variables, des types de données, des structures de contrôle, des fonctions et des classes; 3. Apprenez les fonctionnalités avancées de C #, telles que LINQ et la programmation asynchrone; 4. Soyez familier avec les techniques de débogage et les méthodes d'optimisation des performances pour les erreurs courantes. Avec ces étapes, vous pouvez progressivement pénétrer le monde de C # .NET et écrire des applications efficaces.

C # et .NET: Comprendre la relation entre les deuxC # et .NET: Comprendre la relation entre les deuxApr 17, 2025 am 12:07 AM

La relation entre C # et .NET est inséparable, mais ce ne sont pas la même chose. C # est un langage de programmation, tandis que .NET est une plate-forme de développement. C # est utilisé pour écrire du code, compiler dans le langage intermédiaire de .NET (IL) et exécuté par .NET Runtime (CLR).

La pertinence continue de C # .net: un regard sur l'utilisation actuelleLa pertinence continue de C # .net: un regard sur l'utilisation actuelleApr 16, 2025 am 12:07 AM

C # .NET est toujours important car il fournit des outils et des bibliothèques puissants qui prennent en charge le développement d'applications multiples. 1) C # combine .NET Framework pour rendre le développement efficace et pratique. 2) Le mécanisme de collecte de la sécurité et des ordures de C # améliore ses avantages. 3) .NET fournit un environnement de course multiplateforme et des API riches, améliorant la flexibilité du développement.

Du Web au bureau: la polyvalence de C # .netDu Web au bureau: la polyvalence de C # .netApr 15, 2025 am 12:07 AM

C # .NETtisversatileforbothwebandDeskTopDevelopment.1) forweb, useasp.netfordynamicapplications.2) fordesktop, employwindowsformSorwpfforrichInterfaces.3) usexamarinforcross-plateformDevelopment, permanant les codéescosswindows, macos, linux, etmobiledevices.

C # .NET et l'avenir: s'adapter aux nouvelles technologiesC # .NET et l'avenir: s'adapter aux nouvelles technologiesApr 14, 2025 am 12:06 AM

C # et .NET s'adaptent aux besoins des technologies émergentes à travers des mises à jour et des optimisations continues. 1) C # 9.0 et .NET5 introduire le type d'enregistrement et l'optimisation des performances. 2) .netcore améliore le support natif et conteneurisé cloud. 3) ASP.Netcore s'intègre aux technologies Web modernes. 4) ML.NET prend en charge l'apprentissage automatique et l'intelligence artificielle. 5) La programmation asynchrone et les meilleures pratiques améliorent les performances.

C # .NET vous convient-il? Évaluer son applicabilitéC # .NET vous convient-il? Évaluer son applicabilitéApr 13, 2025 am 12:03 AM

C # .NeTissuitableFormenterprise-LevelApplications withithemicrosofosystématetoitsstrongThpyping, RichLibrary, androbustperformance.wowever, itmayNotBeidealForcross-PlatformDevelopmentorwhenRawpeediscritical, whileLanguageSlikerUstorGomightBeferable.

C # code dans .NET: Explorer le processus de programmationC # code dans .NET: Explorer le processus de programmationApr 12, 2025 am 12:02 AM

Le processus de programmation de C # dans .NET comprend les étapes suivantes: 1) l'écriture de code C #, 2) la compilation dans un langage intermédiaire (IL) et 3) l'exécution par .NET Runtime (CLR). Les avantages de C # dans .NET sont sa syntaxe moderne, son système de type puissant et son intégration serrée avec le Framework .NET, adapté à divers scénarios de développement des applications de bureau aux services Web.

See all articles

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.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP