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

C++ Discussion :

une priority_queue de pixels


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 89
    Par défaut une priority_queue de pixels
    Bonjour,

    Je cherche à implémenter une priority_queue de pixels dans laquelle la priorité est donnée au pixel ayant le niveau de gris le plus proche d'une certaine valeur v (qui n'est pas connue avant l'exécution)
    Le code de la structure est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct mystruct
    {
    	int x;
    	int y;
    } point;
    ensuite, pour la file
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::priority_queue<point,  std::vector<point>,  compare> points;
    Il me reste l'opérateur compare :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct compare {
       bool operator()(point a, point b) {return abs(t[a.x,a.y]-v)<abs(t[b.x,b.y]-v)}
    };
    La question est : comment passer le buffer t et la valeur v à l'opérateur compare ?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    La question est : comment passer le buffer t et la valeur v à l'opérateur compare ?
    A son constructeur, puis stockés en données membres.

    Pour instancier explicitement le foncteur, il faut utiliser le constructeur de priority_queue qui va bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::priority_queue<point, std::vector<point>, compare> points(compare(t, v));
    PS : typedef struct ça ne sert à rien en C++.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 89
    Par défaut
    Merci ! ça marche parfairtement.
    Encore une petite question :
    Est-ce qu'il n'y aurait pas un moyen pour pouvoir écrire au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	point p;
    	p.x=5;
    	p.y=10;
    	points.push(p);
    simplement :
    En modifiant les structures peut-être?

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    En ajoutant un constructeur qui prend x et y en paramètre tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    points.push(point(5, 10));

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 89
    Par défaut
    heu... la variable points est une variable globale, est-ce qu'il y a un moyen pour initialiser points dans le corp du programme?
    En gros, je cherche à déclarer points avec les variables globales, donc quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::priority_queue<point, std::vector<point>, compare> points;
    Ensuite l'initialisation, peut-être un truc comme :

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    A priori on ne peut pas accéder au foncteur après la construction de la priority_queue, donc il faudrait la réinitialiser complétement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    points = std::priority_queue<point, std::vector<point>, compare>(compare(t, v));

Discussions similaires

  1. créer un "String" d'une largeur en pixels imposée
    Par javamembre dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 05/02/2006, 22h25
  2. Modifier une image par pixels
    Par mateo.14 dans le forum MFC
    Réponses: 10
    Dernier message: 21/01/2005, 15h09
  3. taille limite d'une priority_queue
    Par traiangueul dans le forum SL & STL
    Réponses: 3
    Dernier message: 26/08/2004, 17h19
  4. Taille d'une chaine en pixels...
    Par zoubidaman dans le forum C++Builder
    Réponses: 4
    Dernier message: 13/07/2004, 10h58
  5. Afficher une buffer de pixel avec Direct3D
    Par Black_Daimond dans le forum DirectX
    Réponses: 4
    Dernier message: 27/12/2002, 22h18

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