IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

itération sur priority_queue


Sujet :

SL & STL C++

  1. #1
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut itération sur priority_queue

    En ce moment j'ai besoin d'une structure de type priority_queue mais je dois pouvoir parcourir la file pour mettre à jour certains éléments.
    Seulement vous le savez sans doute :
    Priority_queue does not allow iteration through its elements
    Mais je sais aussi que derrière la file ce cache un autre container standard (par défaut le vector)
    Priority_queue is a container adaptor, meaning that it is implemented on top of some underlying container type. By default that underlying type is vector, but a different type may be selected explicitly.
    Est il possible de parcourir ce vector ou est t il définitivement caché par l'implémentation ?
    Si ce n'est pas possible, ce que je crains, une idée sur la structure qui conviendrait le mieux au problème ? Sachant que :
    • les éléments sont triés par priorités
    • pas de doublons
    • normalement on a besoin d'acceder seulement au premier élément de la file et faire un pop() dessus
    • Mais de temps en temps on doit pouvoir mettre a jour les éléments restants dans la file


    Pour l'instant je suis sur une structure perso composée d'un set trié selon la priorité et j'essaye de gérer moi même ke caractère fifo. Seulement je ne suis pas sur que le set soit tip-top niveau suppression du premier élément.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Bonjour.
    Peut être qu'une map est plus adapté, ou la clef est la priorité d'un élément?

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Est tu sure que c'est basé sur vector??
    si oui, la fonction top ( ) te permettrais d'avoir un pointeur sur le dernier élément du vector (du moins cela me semble logique : c'est plus rapide d'enlever le dernier élément d'un vector que le premier) puis du fait un parcours dans la mémoire?

    mais, bon si ce n'est pas un vector, cela ne marchera pas.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035

  5. #5
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut
    Peut être qu'une map est plus adapté, ou la clef est la priorité d'un élément?
    Pour la map : je ne pense pas que ça soit adapter dans mon cas, au niveau du tri des éléments par priorités notamment et la structure Red Black tree du map est souvent lente si on la détourne de son utilité première.
    Est tu sure que c'est basé sur vector??
    Pour le vector oui d'apres http://www.sgi.com/tech/stl/priority_queue.html
    c'est le fameux underlying container

    Merci du lien j'ai appris pas mal de chose. Je devrais m'en sortir avec ça

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Est tu sure que c'est basé sur vector??
    si oui, la fonction top ( ) te permettrais d'avoir un pointeur sur le dernier élément du vector (du moins cela me semble logique : c'est plus rapide d'enlever le dernier élément d'un vector que le premier) puis du fait un parcours dans la mémoire?
    .
    Ne tiens pas compte de cela... Dans la doc il explique que les éléments peuvent être rangé sous forme de heap. Il n'y as donc aucune raison que top donne le dernier élément de vector ...

    [EDIT]
    pour le heap regarde push_heap et pop_heap
    http://www.sgi.com/tech/stl/pop_heap.html


    [RE EDIT]
    http://cpp.developpez.com/cours/cpp/...ge_21#LXXI-C-1
    comme quoi y as toujours des chose à découvrir sur ce site

  7. #7
    Membre expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Par défaut
    à la limite, tu peux te fiche que la priority_queue utilise en interne un vecteur.
    C'est la structure par défaut, mais tu peux mettre un autre conteneur (lesquels, je ne les ais pas en tête, il est trop tard)...

    Par contre, l'interface de la priority_queue ne te permet pas d'itération sur les éléments, à par de les ôter au fur et à mesure...

    A moins d'utiliser deux priority_queue, tu fais le pop() tu modifies, et l'insert dans l'autre...

Discussions similaires

  1. Itération sur une liste en JSF?
    Par toutoune60 dans le forum JSF
    Réponses: 2
    Dernier message: 26/12/2007, 09h43
  2. itération sur des objets de types différents ?
    Par jc63 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 07/09/2007, 08h19
  3. itération sur un objet "file"
    Par kromartien dans le forum Général Python
    Réponses: 1
    Dernier message: 28/07/2007, 18h57
  4. [Batch] itération sur les fichiers d'un dossier
    Par yelbied dans le forum Windows
    Réponses: 3
    Dernier message: 12/07/2007, 16h09
  5. itération sur les champs
    Par shnouf dans le forum Langage
    Réponses: 2
    Dernier message: 28/11/2006, 15h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo