C ++ Priority Fitre avec comparateur personnalisé

C ++ Priority Fitre avec comparateur personnalisé
Les files d'attente prioritaires sont en effet un type de données unique. Ils sont soutenus par des tas (une forme d'un arbre binaire), mais ils ont été utilisés de la même manière que les files d'attente. Ce qui distingue une file d'attente prioritaire d'une file d'attente régulière, ce serait qu'elle maintient son arrangement de tri en durée d'O (Logn) même lors de l'ajout ou de la suppression de nouveaux membres. Avec des types de données rudimentaires comme les nombres et les chaînes, l'utilisation d'une file d'attente prioritaire semble être la plus simple. Les files d'attente prioritaires pour les types personnalisées sont possibles, tout comme la possibilité de construire un modèle de tri personnalisé pour les types de base. En utilisant des files d'attente prioritaires, vous pouvez utiliser un comparateur personnalisé, comme la commande de vecteurs, pour décrire comment les entrées dans la file d'attente prioritaire peuvent être triées. En C ++, cela est généralement terminé avec seulement une structure. Cependant, les déclarations lambda sont plus rapides à construire et vous permettent d'accéder aux variables au-delà de la portée (qui est complexe pour vous assurer avec les structures). Ainsi, dans ce guide, nous discuterons de l'exemple de file d'attente prioritaire avec le comparateur du client.

Exemple:

Commençons par l'exemple de l'utilisation d'une file d'attente prioritaire avec le comparateur personnalisé en C++. Ainsi, la coquille de borne doit être ouverte avec Ctrl + Alt + T Short Way. Le fichier C ++ doit être créé dans le shell en utilisant l'instruction «Touch» d'Ubuntu. C'est assez facile de le faire. Après cela, ce fichier doit être ouvert au sein d'un éditeur pour faire du code. Vous pouvez avoir un éditeur VIM, Text ou Nano. Nous utilisons ici l'éditeur «Nano» pour l'édition rapide et la mise à jour.

$ touche la file d'attente.CC
$ Nano Queue.CC

Ainsi, le fichier C ++ vide sera ouvert sur votre écran de terminal au sein de l'éditeur Nano. Il est temps d'ajouter des bibliothèques d'en-tête dans son début pour que notre code fonctionne correctement. Par conséquent, nous avons utilisé le panneau «#include» avec chaque en-tête. L'en-tête «iOStream» est utilisé pour utiliser le flux d'entrée-sortie. L'en-tête «vecteur» est rejeté pour utiliser la structure de données vectorielle. L'en-tête «non ordonné_map» a été utilisé pour créer une carte pour les valeurs d'un vecteur en quantités. Le fichier d'en-tête «file d'attente» est là pour utiliser la file d'attente prioritaire et ses fonctions de données connexes. Nous avons commencé la méthode principale () après l'utilisation de l'espace de noms standard «STD», nous avons commencé la méthode principale (). Nous avons créé une structure de données vectorielle nommée «couleur» du type de chaîne pour maintenir les valeurs de chaîne. Alors que l'objet vectoriel «couleur» a utilisé la fonction push_back () pour ajouter des noms de couleur dans le vecteur, je.e., Rouge, vert, bleu, blanc et noir.

#inclure
#inclure
#inclure
#inclure
Utilisation de Namespace Std;
int main()

couter << "Starting… \n";
vecteur couleur;
couleur.push_back ("rouge");
couleur.push_back ("vert");
couleur.push_back ("bleu");
couleur.push_back ("blanc");
couleur.push_back ("noir");

Après avoir créé un objet vectoriel, nous devons créer une structure de carte à l'aide du mot-clé «Undered_Map». L'objet de cette carte est «m» et il contient des paramètres de chaîne et entier. La carte est créée pour lier la quantité entière avec le vecteur de chaîne, de sorte que la valeur de type entier est affectée aux valeurs de chaîne d'un vecteur «couleur» individuellement.

Non ordonné_mapm;
m ["rouge"] = 2;
m ["vert"] = 4;
m ["bleu"] = 6;
m ["blanc"] = 8;
m ["noir"] = 10;

Voici le comparateur personnalisé déclaré «CMP» variable avec le mot-clé «Auto."Le mot-clé automatique est utilisé pour récupérer le résultat de tout type sans le définir. L'instruction «IF» est utilisée pour vérifier si la quantité d'une valeur de carte gauche est égale à la quantité d'une valeur de carte droite ou non. Si c'est le cas, il reviendra que le caractère du côté gauche est supérieur au caractère du côté droit d'une chaîne à la variable «CMP». S'ils ne sont pas égaux, il renverra que la valeur de quantité côté droit est supérieure à la valeur de quantité côté gauche d'une chaîne via une carte. Il s'agit de tri la quantité dans l'ordre descendant tandis que le nom de la chaîne est ordonné par ordre croissant.

auto cmp = [&] (String & l, String & r)
if (m [le] == m [r])
retourner l> r;
retour m [r]> m [l];
;

Maintenant, il est temps de créer une file d'attente prioritaire et d'ajouter toutes les couleurs en utilisant le vecteur. Ainsi, la file d'attente de priorité a été générée à l'aide du vecteur de type de chaîne, et le type de déclaration a été défini comme obtenu à partir de la variable comp. Le PQ est l'objet de file d'attente prioritaire. La boucle «pour» est là pour pousser chaque couleur à la file d'attente prioritaire «pq» via la fonction push ().

File d'attente de priorité, DecType (CMP)> PQ (CMP);
for (const string & clr: couleur)
pq.push (CLR);

La boucle «while» continue d'être exécutée jusqu'à ce que la file d'attente ne soit pas vide et en ajoute chaque chaîne à la chaîne «CLR». Cette valeur particulière serait apparue et afficherait sur la coquille. Notre code de programme est terminé ici et prêt à être exécuté.

alors que(!pq.vide())
String Fruit = PQ.haut();
pq.populaire();
couter << fruit << " " << m[fruit] << endl;

couter << "Ending… \n";
retour 0;

La compilation est assez réussie. Plus que cela, toutes les valeurs de chaîne du vecteur ont été affichées sur la coquille avec leurs quantités qui sont cartographiées via «Map.«Vous pouvez voir que l'ordre de quantité est descendant dans notre cas.

Fitre $ G ++.CC
$ ./un.dehors

Conclusion:

Il s'agissait de l'exemple simple d'une file d'attente prioritaire avec un comparateur personnalisé en C++. Nous en avons discuté dans un seul exemple en détail en maintenant un moyen simple et le plus simple. Nous avons ajouté le code sous forme de morceaux qui aident les lecteurs à bien le comprendre.