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 :

Tri d'une matrice (entrée sous forme de vector)


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Tri d'une matrice (entrée sous forme de vector)
    J'ai un problème d'utilisation des iterators dans le tri....
    Comment dans mon programme de comparaison atteindre le premier élément de la ligne ?

    Ci-dessous mon source commenté.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    /* essai de tri des lignes d'une matrice entrée sous forme de vector.
    critère du tri : le plus grand premier élément de chaque ligne
    */
    #include <iostream>
    #include <vector>
    using namespace std;
    int n;//nb lignes
    int m;//nb colonnes
    vector<vector<int> > matrice;//la matrice
     
    bool compare_lignes (vector<vector<int> >::iterator numero1,vector<vector<int> >::iterator numero2)//on trie
    {
        if(matrice.numero1[0]>matrice.numero2[0]) return true;
        else return false;
    }
     
    int main()
    {
      freopen("tri.txt", "r", stdin);//pour tester MES entrées
      cin >> n;
      cin >> m;
      matrice.resize(n);
      for(int _l = 0; _l < n; ++_l)
        matrice[_l].resize(m);
      for(int _l = 0; _l < n; ++_l)
        for(int _c = 0; _c < m; ++_c)
           cin >> matrice[_l][_c];
     
      sort(matrice.begin(),matrice.end(),compare_lignes);
      return 0;
    }
    Merci pour la réponse.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    327
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 327
    Points : 402
    Points
    402
    Par défaut
    Bonjour,
    Tout d'abord, bienvenue sur le forum.
    Merci de mettre ton code entre des balises CODE /CODE.
    Sinon, il est illisible.

    Ensuite on pourrait faire quelques remarques sur ton code ?
    Pour le remplissage de la matrice pourquoi tu fait 3 boucles alors que 2 serait largement suffisante ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(int _l = 0; _l < n; ++_l)
    {
    matrice[_l].resize(m);
    for(int _c = 0; _c < m; ++_c)
    cin >> matrice[_l][_c];
    }
    Ensuite, tu peux très largement simplifier ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bool compare_lignes (vector<vector<int> >::iterator numero1,vector<vector<int> >::iterator numero2)//on trie
    {
    return matrice.numero1[0]>matrice.numero2[0;}
    Pour finir, si tu veux simplement trier un vecteur ? Tu peux prendre cette exemple qui a l'air fort correct :
    http://www.cplusplus.com/reference/algorithm/sort/

    J'espère d'avoir aidé.
    A bientôt

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci et ok pour les boucles.
    Par contre, ce qui m'intéressait surtout, c'était la fonction de comparaison qui me donne à la compilation, un message d'insulte du compilateur.

    C'est cette fonction qui bogue.
    Le problème se résume ainsi :
    "Comment arriver dans cette fonction atteindre (pour comparaison) les éléments "zéro" de chaque ligne de ma matrice".

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    visiblement c'est le
    " sort(matrice.begin(),matrice.end(),compare_lignes);"
    qui plante. ????

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Problème résolu....
    Il fallait passer des vectors et non des iterateurs à la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    "bool compare_lignes (vector<int> numero1,vector<int>numero2)//on trie
    {
    if(numero1[0]>numero2[0]) return true;
    else return false;
    }
    Merci

  6. #6
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Attention, il vaut mieux passer des références constantes en paramètre de compare_lignes pour éviter une montagne de copie inutile.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool compare_lignes (const vector<int>& numero1, const vector<int>& numero2)
    {
       return numero1[0] > numero2[0] ;
    }
    Car sinon, à chaque appel de compare_ligne, numero1 et numero2 sont des copies des colonnes de la matrice d'origine.

  7. #7
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci, effectivement !!

Discussions similaires

  1. Lien vers une anim flash sous forme de popup
    Par ghyosmik dans le forum Flash
    Réponses: 1
    Dernier message: 15/06/2006, 10h28
  2. Exportation des données d'une base Oracle sous forms
    Par moezsokrati dans le forum Forms
    Réponses: 4
    Dernier message: 13/10/2005, 08h55
  3. Réponses: 12
    Dernier message: 22/02/2005, 17h45
  4. créer une arborescence windows sous forme d'arbre java
    Par chupachoc dans le forum Composants
    Réponses: 3
    Dernier message: 01/10/2002, 16h48

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