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 :

Insertion dans une deque [Débutant(e)]


Sujet :

SL & STL C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3
    Par défaut Insertion dans une deque
    Bonjour.

    Pour un petit projet, j'ai créé une classe "Entity", qui possède un accesseur get_volume() renvoyant un entier.
    J'utilise également une deque pour ranger ces objets, par volume décroissant. J'avais pensé faire de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void insert_entity(ent::Entity thing)
    {
    std::deque<ent::Entity>::iterator i = find_if(m_entities[x][y][z].begin(), m_entities[x][y][z].end(), i.get_volume()<=thing.get_volume());
    m_entities[x][y][z].insert(i, thing);
    }
    mais évidemment le compilateur apprécie moyennement que je considère l'itérateur comme une Entity. J'ai essayé en modifiant le prédicat de diverses manières, mais je ne voit pas comment juste à partir de l'itérateur je peux utiliser get_volume(). Je n'ai pas non plus réussi à créé de prédicat prenant thing.get_volume comme paramètre.
    J'ai aussi essayé d'utilisé un std::set, avec un foncteur pour les classer, j'avais aussi pensé utiliser une technique récursive sur une liste, mais je ne voyais pas comment coder élégamment la queue de la liste.

    Donc voila mon problème, comment insérer efficacement (de préférence dans une deque ou une liste) un élément qui sera classé suivant la valeur rendue par get_volume() ?

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    À priori la structure la plus appropriée serait std::priority_queue, les éléments y sont triés automatiquement.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3
    Par défaut
    Ok merci je vais essayer comme ça.
    Sinon, j'avais voulu faire l'insertion dans une liste en trouvant la position avec un find_if, comment aurais-je du écrire mon prédicat ? (c'est une question qui m'a tant taraudée que j'aimerai bien avoir une solution).

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Comme expliqué dans la FAQ

Discussions similaires

  1. [debutant]insertion dans une BDD
    Par EssaiEncore dans le forum ASP
    Réponses: 7
    Dernier message: 10/02/2005, 14h58
  2. INTERBASE 5.5 insertion dans une colonne BLOB
    Par mariustrezor dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/10/2004, 18h06
  3. Extraction d'un .txt et Insertion dans une table
    Par PoPmiSiR dans le forum Access
    Réponses: 8
    Dernier message: 28/10/2004, 19h13
  4. Détection insertion dans une Table
    Par abelman dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/07/2004, 14h24
  5. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 22h34

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