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

Langage C++ Discussion :

trie tableau sur les lignes


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 36
    Points : 25
    Points
    25
    Par défaut trie tableau sur les lignes
    Bonjour,
    je cherche une fonction en c++ prenant en argument un tableau 2D contenant des coordonnées de points (colonne 0 représentant les x et colonne 1 représentant les y) qui trie ces coordonnées par ordre croissant sur les lignes.
    je cherche donc a faire en c++ ce que la fonction "sortrows" fait en matlab.
    voici un exemple :
    tableau originale :

    259 196
    261 198
    216 156
    217 158
    219 159

    tableau trié par ordre croissant sur les ligne :

    216 156
    217 158
    219 159
    259 196
    261 198

  2. #2
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Salut,

    Peut-être que tu pourrais mettre tes coordonnées dans une structure qui associe les coordonnées x et y.
    En suite, tu définis une relation d'ordre pour ces objet.
    Et après tu mets ces objets dans une 'list' et tu lance un tri à l'aide de la fonction 'sort'

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    par exemple une table de hachage avec comme clé les x et valeurs correspondantes les y ? puis je met chaque element de la table dans une liste ? pouvez vous m'aidez dans les structures je ne m'y connais pas très bien en c++.
    merci beaucoup.

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Tu peux utiliser une map<float, float> (ou multimap si tu peux avoir plusieurs fois le même point) pour que tes données soient triée dès l'insertion. Par contre, tu ne pourras plus modifier la clé de trie (si tu choisis que y est la clé, tu ne pourras plus trier selon x).

    Sinon, la solution de bertry est de créer une structure contenant les coordonnées puis de donnée une fonction de comparaison (ou 2 pour avoir le choix de la clé). Tu mets ensuite tes données dans un vector (ou list) puis tu tries avec sort.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct point { float x, y; };
    bool lessByX(point const& p1, point const& p2) { return p1.x < p2.x; }
    bool lessByY(point const& p1, point const& p2) { return p1.y < p2.y; }
    vector<point> points;
    sort(points.begin(), points.end(), lessByX);
    La différence est que les données sont triées à la demande et pas à l'insertion (mais il est possible de le faire)

  5. #5
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    En effet ma solution était franchement simpliste!

    Celle de gbdivers est propre et sans bavures
    Tu peux en plus utiliser une fonction qui trie par X et qui si il y a plusieurs X identiques affine le trie en triant alors par Y :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    bool TrieParXPuisTrieParY(point const& p1, point const& p2)
    {
         bool test;
         if ( p1.x != p2.x )
              return p1.x < p2.x;
         else
              return p1.y < p2.y;
    }

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ExtJS 3.2] Effet sur les Lignes d'un tableau (Editgrid)
    Par pitou26 dans le forum Ext JS / Sencha
    Réponses: 0
    Dernier message: 07/01/2013, 09h44
  2. [Tableaux] lien sur les lignes d'un tableau
    Par einsteineuzzz dans le forum Langage
    Réponses: 2
    Dernier message: 19/06/2006, 14h16
  3. changement de couleur sur les lignes d'un tableau
    Par brasco06 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 13/04/2006, 18h03
  4. Empecher l'affichage d'un tableau sur plusieurs lignes ??
    Par cedre22 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 03/02/2006, 08h47
  5. Réponses: 3
    Dernier message: 26/09/2005, 22h24

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