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] Tableau de structures


Sujet :

C++

  1. #1
    R�dacteur
    Avatar de Arnaud F.
    Homme Profil pro
    D�veloppeur COBOL
    Inscrit en
    Ao�t 2005
    Messages
    5 183
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 5 183
    Par d�faut [Tri] Tableau de structures
    Bonjour,

    je suis actuellement sur l'implentations de matrices creuses, j'ai donc trois tableaux, le premier correspondant aux valeurs non nulles de la matrice, le second correspondant au num�ro des lignes sur lesquelles ce trouvent les valeurs et un tableau de colonnes o� se trouvent les valeurs.

    Pour �tre plus clair, voici un exemple (pour une Matrice(3, 3)):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    double val[2]= {1, 0.5};
    int lig[2]= {0, 1};
    int col[2]= {1, 0};
    Ce qui repr�sente la matrice :
    0 1
    0.5 0

    Bref, �a fonctionne par couple de valeur en fonction de l'indice du tableau.

    Et j'aimerais savoir comment trier ces tableaux en fonction de lig, puis de col. Tout en laissant les couples de valeurs intacts...

    Exemple:

    double val[4]= {2, 3, 1, 4};
    int lig[4]= {0, 1, 0, 1};
    int col[4]= {1, 0, 0, 1};

    l'�tat des tableaux apr�s le tri devra donc �tre le suivant :
    double val[4]= {1, 2, 3, 4};
    int lig[4]= {0, 0, 1, 1};
    int col[4]= {0, 1, 0, 1};

    Je ne sais pas trop comment faire (je peux passer par des structures, j'aurai donc un tableau de structures).

    C'est par l'adresse que vaut le b�cheron, bien plus que par la force. Hom�re

    Installation de Code::Blocks sous Debian � partir de Nightly Builds

  2. #2
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Ce serait pas plus simple si tu faisais
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    struct point
    {
       int ligne;
       int colonne;
       double valeur;
    };
     
    point val[2] = { {0, 1, 1.0}, {1, 0, 0.5} };
    ?

  3. #3
    R�dacteur
    Avatar de Arnaud F.
    Homme Profil pro
    D�veloppeur COBOL
    Inscrit en
    Ao�t 2005
    Messages
    5 183
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 5 183
    Par d�faut
    Citation Envoy� par loufoque Voir le message
    Ce serait pas plus simple si tu faisais
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    struct point
    {
       int ligne;
       int colonne;
       double valeur;
    };
     
    point val[2] = { {0, 1, 1.0}, {1, 0, 0.5} };
    ?
    Si et c'est que j'avais commenc� � faire

    Par contre, je ne sais pas comment trier cette structure apr�s. (Je suis en train de regarder du c�t� de sort et je pense avoir trouv� mon bonheur).

    Seulement, je trouve la conversion de tableau-> vecteur<struct> -> tableau lourde... Y a pas moyen d'optimiser la chose?
    C'est par l'adresse que vaut le b�cheron, bien plus que par la force. Hom�re

    Installation de Code::Blocks sous Debian � partir de Nightly Builds

  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
    Par d�faut
    avec une multi map peut etre:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    std::multimap<double ,std::pair<int,int> >
    ainsi ta map sera tri� en fonction de la valeur et la valeur sera associ� � une position
    Ce ne serait pas le m�me exo que http://www.developpez.net/forums/sho...d.php?t=447046 ???

  5. #5
    R�dacteur
    Avatar de Arnaud F.
    Homme Profil pro
    D�veloppeur COBOL
    Inscrit en
    Ao�t 2005
    Messages
    5 183
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 5 183
    Par d�faut
    Citation Envoy� par Mongaulois Voir le message
    avec une multi map peut etre:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    std::multimap<double ,std::pair<int,int> >
    ainsi ta map sera tri� en fonction de la valeur et la valeur sera associ� � une position
    Ce ne serait pas le m�me exo que http://www.developpez.net/forums/sho...d.php?t=447046 ???
    Du tout , je suis en stage

    Vais regarder du c�t� de multimap



    [edit] T'aurai pas un tutoriel sur les map et multimap?
    C'est par l'adresse que vaut le b�cheron, bien plus que par la force. Hom�re

    Installation de Code::Blocks sous Debian � partir de Nightly Builds

  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 buchs Voir le message
    T'aurai pas un tutoriel sur les map et multimap?
    Google
    La multimap est une map o� il peut y avoir une clef associ� a plusieurs �l�ments.
    tu peut te baser sur la faq pour commencer.
    http://cpp.developpez.com/faq/cpp/?page=STL
    et ce site
    http://www.cplusplus.com/reference/stl/multimap/

    Comprend tu le concept de map? je pense que oui mais on ne sait jamais

  7. #7
    R�dacteur
    Avatar de Arnaud F.
    Homme Profil pro
    D�veloppeur COBOL
    Inscrit en
    Ao�t 2005
    Messages
    5 183
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 5 183
    Par d�faut
    J'ai quelques recherches compl�mentaires sur les map (tout court) et c'est vrai que �a peut �tre int�ressant de proc�der de la sorte (�a me fait juste r�organiser tout le code existant ).

    Donc si je fais une map avec une paire d'entier pour la cl� (les coord.) et un double pour la valeur (la valeur de mon �l�ment ds la matrice), �a allegerait pas mal le code .

    Si je passe par cette m�thode, j'aurai pas besoin d'�crire de foncteur, ou bien? (il triera en fonction du premier �l�ment, puis du second, non?).

    Troisi�mement, comment utilise t'on se genre de map? (pour ins�rer une valeur, la supprimer, etc.)

    beaucoup

    [edit]
    Citation Envoy� par Mongaulois Voir le message
    Google
    La multimap est une map o� il peut y avoir une clef associ� a plusieurs �l�ments.
    tu peut te baser sur la faq pour commencer.
    http://cpp.developpez.com/faq/cpp/?page=STL
    et ce site
    http://www.cplusplus.com/reference/stl/multimap/

    Comprend tu le concept de map? je pense que oui mais on ne sait jamais
    Oui je connais le principe de map (tri auto et tout).

    Par contre, pourquoi une multimap et pas une simple map?
    C'est par l'adresse que vaut le b�cheron, bien plus que par la force. Hom�re

    Installation de Code::Blocks sous Debian � partir de Nightly Builds

  8. #8
    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 buchs Voir le message
    Si je passe par cette m�thode, j'aurai pas besoin d'�crire de foncteur, ou bien? (il triera en fonction du premier �l�ment, puis du second, non?).
    C'est ce qui me semble aussi

    Citation Envoy� par buchs Voir le message
    Troisi�mement, comment utilise t'on se genre de map? (pour ins�rer une valeur, la supprimer, etc.)
    regarde les fonctions sur ce site
    http://www.cplusplus.com/reference/stl/multimap/

    Sinon si c'est juste pour les ajouter et les trier une seul fois, la map n'est s�rement pas adapt� a ton probl�me. Dans ce cas il serait mieux d'avoir une structure, une vector sur cette structure et un foncteur pour le trie

    [edit]
    http://cpp.developpez.com/faq/cpp/?p...hoix_conteneur
    http://cpp.developpez.com/faq/cpp/?p...TL_custom_sort

  9. #9
    R�dacteur
    Avatar de Arnaud F.
    Homme Profil pro
    D�veloppeur COBOL
    Inscrit en
    Ao�t 2005
    Messages
    5 183
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 5 183
    Par d�faut
    Citation Envoy� par Mongaulois Voir le message
    Sinon si c'est juste pour les ajouter et les trier une seul fois, la map n'est s�rement pas adapt� a ton probl�me. Dans ce cas il serait mieux d'avoir une structure, une vector sur cette structure et un foncteur pour le trie
    Non, �a sera tri� constamment, suffit de faire une op�ration sur la matrice (genre +) pour que de nouvelles valeurs apparaissent dedans et d'autres supprim�es. Donc je pense que la map me m'�conomisera pas mal de ressources de ce c�t�

    Concernant le site sur les multimap, j'en viens justement.

    Et nos posts se sont crois�s, donc je sais pas si t'as vu, mais je demandais quelle �tait la diff�rence entre une map et une multimap?

    beaucoup en tout cas

    [edit] J'ai d�j� �pluch� la FAQ
    C'est par l'adresse que vaut le b�cheron, bien plus que par la force. Hom�re

    Installation de Code::Blocks sous Debian � partir de Nightly Builds

  10. #10
    R�dacteur
    Avatar de Arnaud F.
    Homme Profil pro
    D�veloppeur COBOL
    Inscrit en
    Ao�t 2005
    Messages
    5 183
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 5 183
    Par d�faut
    Mon choix se porte donc sur une map et non une multimap (normalement, les cl�s sont unique puisqu'on ne peux avoir qu'une valeur par coordonn�es ).

    Je commence donc � coder, mais je bloque sur l'insertion d'une valeur dans la matrice
    Dans mon .h : map<pair<int, int>, double> valeurs;
    Je fais :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    valeurs.insert(make_pair(0, 0), 1.0);
    Mais �a ne compile pas

    J'en d�duis que c'est pas comme �a que l'on ins�re

    Z'avez des suggestions?
    C'est par l'adresse que vaut le b�cheron, bien plus que par la force. Hom�re

    Installation de Code::Blocks sous Debian � partir de Nightly Builds

  11. #11
    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 buchs Voir le message
    Mon choix se porte donc sur une map et non une multimap (normalement, les cl�s sont unique puisqu'on ne peux avoir qu'une valeur par coordonn�es ).
    Si se sont les coordonn�, oui c'ets plust�t une map

    Citation Envoy� par buchs Voir le message
    ommence donc � coder, mais je bloque sur l'insertion d'une valeur dans la matrice
    Dans mon .h : map<pair<int, int>, double> valeurs;
    Je fais :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    valeurs.insert(make_pair(0, 0), 1.0);
    Mais �a ne compile pas

    J'en d�duis que c'est pas comme �a que l'on ins�re

    Z'avez des suggestions?
    en faite une map c'est un ensemble de pair.
    Donc ici ce qui est stock� est une pair constituer de :
    - pair<int,int>
    - double
    voici deux fa�on d'ajouter un �l�ment a la map

    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    std::map<std::pair<int, int>, double>  mymap;
    mymap[std::make_pair(10,10)]=10;
    mymap.insert(std::make_pair( std::make_pair(11,10),20) );

  12. #12
    R�dacteur
    Avatar de Arnaud F.
    Homme Profil pro
    D�veloppeur COBOL
    Inscrit en
    Ao�t 2005
    Messages
    5 183
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 5 183
    Par d�faut
    Citation Envoy� par Mongaulois Voir le message
    Si se sont les coordonn�, oui c'ets plust�t une map

    Je c
    en faite une map c'est un ensemble de pair.
    Donc ici ce qui est stock� est une pair constituer de :
    - pair<int,int>
    - double
    voici deux fa�on d'ajouter un �l�ment a la map

    Code C++ :
    std::map<std::pair<int, int>, double> mymap;
    mymap[std::make_pair(10,10)]=10;
    mymap.insert(std::make_pair( std::make_pair(11,10),20) );
    C'est par l'adresse que vaut le b�cheron, bien plus que par la force. Hom�re

    Installation de Code::Blocks sous Debian � partir de Nightly Builds

  13. #13
    R�dacteur
    Avatar de Arnaud F.
    Homme Profil pro
    D�veloppeur COBOL
    Inscrit en
    Ao�t 2005
    Messages
    5 183
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 5 183
    Par d�faut
    Bon, je me permets juste de poster � la suite car j'ai un l�ger souci d'it�rateur... (dans une fonction amie)

    Prototype :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    ostream & operator<<(ostream & o, const MatriceCreuse & mc);
    Code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
        map<pair<int, int>, double>::iterator it;
        /*it=*/ mc.valeurs.find(make_pair(0, 0));
    En commentant l'affectation, le programme compile, en d�commentant, �a ne compile pas. J'ai copi� ce bout de code dans une fonction de la classe et �a passe sans souci

    D'o� peut provenir l'erreur?
    C'est par l'adresse que vaut le b�cheron, bien plus que par la force. Hom�re

    Installation de Code::Blocks sous Debian � partir de Nightly Builds

  14. #14
    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
    si c'est dans la fonction
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ostream & operator<<(ostream & o, const MatriceCreuse & mc);
    je pense que c'est du au fait que mc est const. Il faut donc un const_iterator
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    map<pair<int, int>, double>::const_iterator it;
    it= mc.valeurs.find(make_pair(0, 0));
    Juste pour savoir pourquoi fait tu un find(make_pair(0, 0))??
    si c'est pour parcourir la map faut plust�t utiliser les iterators fournie par les m�thodes begin() et end()

  15. #15
    R�dacteur
    Avatar de Arnaud F.
    Homme Profil pro
    D�veloppeur COBOL
    Inscrit en
    Ao�t 2005
    Messages
    5 183
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 5 183
    Par d�faut
    Citation Envoy� par Mongaulois Voir le message
    si c'est dans la fonction
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ostream & operator<<(ostream & o, const MatriceCreuse & mc);
    je pense que c'est du au fait que mc est const. Il faut donc un const_iterator
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    map<pair<int, int>, double>::const_iterator it;
    it= mc.valeurs.find(make_pair(0, 0));
    Juste pour savoir pourquoi fait tu un find(make_pair(0, 0))??
    si c'est pour parcourir la map faut plust�t utiliser les iterators fournie par les m�thodes begin() et end()
    T'es un chef, �a fonctionne
    C'est par l'adresse que vaut le b�cheron, bien plus que par la force. Hom�re

    Installation de Code::Blocks sous Debian � partir de Nightly Builds

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Tri dans un tableau de structure
    Par sonic1 dans le forum C
    R�ponses: 4
    Dernier message: 15/03/2009, 23h41
  2. [VB6]Tri multi-colonnes sur tableau de structure
    Par ELGUEVEL dans le forum VB 6 et ant�rieur
    R�ponses: 2
    Dernier message: 17/02/2006, 08h02
  3. R�ponses: 9
    Dernier message: 13/02/2006, 08h39
  4. [D�butant] Tri tableau String
    Par Sigwald dans le forum Collection et Stream
    R�ponses: 22
    Dernier message: 14/05/2004, 08h55
  5. [langage] TRI TABLEAU ASSOCIATIF
    Par proner dans le forum Langage
    R�ponses: 5
    Dernier message: 04/03/2003, 16h38

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