Je pense que ton parcours n'est pas cohérent. Une priority_queue n'est pas random-accessible. Le seul moyen de la parcourir est de faire une boucle tant que c'est pas vide :
while (!priority_queue.empty()) {
Element *element = priority_queue.top();
std::cout <<element->data<<" : "<<element->priority<<'\n';
priority_queue.pop();
}
Et dans mon cas j'ai comme résultat :
4 : 2
6 : 2
5 : 2
3 : 1
2 : 1
1 : 1
git is great because Linus did it, mercurial is better because he didn't.
Une priority_queue garantit que le prochain élément sorti est le plus grand. En cas d'égalité, elle peut retourner celui qu'il veut. En interne les données sont stockées sous la forme d'une "heap", donc l'ordre initial n'est pas garanti, ce qui est garanti est de sortir toujours l'élément le plus grand tout en étant plus rapide qu'un système trié. Ici, elle fournit toujours un élément qui la la priorité 2, elle fait son boulot!
Si ton objectif est de garder l'ordre initial, tu peux utiliser un std::vector trié (tu insères les données à la position indiquée par un std::binary_search(), et tu extraits les données par un pop_back()). Ça force une insertion triée qui est un peu plus lente qu'une heap mais ça garde l'ordre initial.
Il n'y a pas de pointeur null ce conteneur sera dans un object qui s'occupera de la mémoire.
J'ai dit NUS pas NULL.
di20 a écrit:
Le seul moyen de la parcourir est de faire une boucle tant que c'est pas vide
je ne peut pas me permettre de tout parcourir il y aura beaucoup tros élément a terme .
Je pense que dans ce cas tu ne saisis pas l'utilité de la priority_queue. C'est pas un conteneur à parcourir, c'est un conteneur dont le but est de dépiler dans l'ordre.
git is great because Linus did it, mercurial is better because he didn't.
git is great because Linus did it, mercurial is better because he didn't.
En recherche d'emploi.
git is great because Linus did it, mercurial is better because he didn't.