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 :

TStringList ou TList, TVector, TCollection ?


Sujet :

SL & STL C++

  1. #1
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut TStringList ou TList, TVector, TCollection ?
    Bonjour,

    Je dois stocker des AnsiString associés à des longs.
    Ex. : [Fabrice, 2002], [Jacques, 525], [Peter, 5668] etc.

    TStringList permet certes d'associer les nombres aux prénoms
    de mon exemple mais en tant que AnsiString. Donc pas facile d'incrémenter
    ces nombres (par ++) ni de trier les prénoms en fonction des nombres
    qui leur sont associés.

    Je pourrais evidemment créer un tableau de structs à la "old school"
    mais je perds alors l'ajout pratique d'éléments nouveaux grâce à Add()
    qui permet d'agrandir le tableau sans forcément savoir au départ combien il
    devra contenir d'éléments. (Je sais pas si je suis clair...).

    Est-ce que vous suriez comment faire avec le même TStringList ou bien
    en utilisant TList, TVector, TCollection ?

    Merci, A++

  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
    Est-ce que vous suriez comment faire avec le même TStringList ou bien
    en utilisant TList, TVector, TCollection ?
    Il n'y a pas de types semblables dans la bibliothèque standard.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    si tu veux utiliser du C++ standard, il faut utiliser std::vector.

    Ce qui commence par T, ce sont des objets spéficiques à C++ builder non?

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Oui. Il m'a tout l'air d'être sur le mauvais forum.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut Au temps pour moi
    OK, c'est vrai je cherchais du coté des TList, TVector, etc qui appartiennent
    à Builder alors que vector est strictement C++.
    Mais je vois que ca peut très bien faire l'affaire.. si je crée une struct comme suit pour en aligner plusieurs dans un vecteur :

    struct Donnees
    {
    AnsiString string;
    Long valeur;
    }

    std::vector<Donnees> vecteur;
    Donnees Test;

    Je peux faire par exemple un
    vecteur.push_back(Test);

    Mais comment faire un sort sur l'élément Long Valeur plutot que AnsiString ?

    Ou dois-je plutot utiliser un List qui contient une méthode sort ?

  6. #6
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    std::vector<std::pair<AnsiString, Long> > tonVecteur;
     
    struct foncteur
    {
        bool operator(const std::pair<AnsiString, long>& a, const std::pair<AnsiString, long>& b) const
        {
            return a.second < b.second;
        }
    };
     
    std::sort(tonVecteur.begin(), tonVecteur.end(), foncteur());

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Il faut que tu utilises un algorithme de tri (std::sort), mais aussi que tu crées des fonctions ( généralement on utilisera plutôt des "foncteurs", qui sont des structures ou des classes qui agissent comme des fonctions ) pour que l'algorithme sache comment tu veux effectuer le tri.

    regarde ici:

    http://c.developpez.com/faq/cpp/?pag...TL_custom_sort

  8. #8
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut
    Merci Loufoque et Nikko 34 !
    Je réfléchis à tout cela et vous tient au courant...

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Bonjour,

    S'il faut conserver la structure :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <functional>
    #include <iterator>
    #include <string>
     
    typedef struct S
    { std::string z ;
      long l ;
    } S ;
     
    std::ostream& operator << ( std::ostream& os, const S& s )
    { std::cout << s.z << " " << s.l << std::endl ;
      return os ;
    };
     
    class grLong
    { public:
      grLong() {}
      bool operator()(const S& v , const S& w ) { return v.l <  w.l ; }
    };
     
    class grName
    { public:
      grName() {}
      bool operator()(const S& v , const S& w ) { return v.z <  w.z ; }
    };
     
    int main()
    { S s ;
      std::vector<S> v ;
      s.z = "aaaa" ;
      s.l = 10 ;
      v.push_back( s ) ;
      s.z = "zzz" ;
      s.l = 90 ;
      v.push_back( s ) ;
      s.z = "ddd" ;
      s.l = 11 ;
      v.push_back( s ) ;
      s.z = "cccc" ;
      s.l = -9 ;
      v.push_back( s ) ;
     
      std::copy( v.begin(), v.end(), std::ostream_iterator<S>( std::cout, "") ) ;
      std::cout << std::endl ;
     
      std::sort( v.begin(), v.end(), grLong() ) ;
      std::copy( v.begin(), v.end(),   std::ostream_iterator<S>( std::cout, "") ) ;
      std::cout << std::endl ;
     
      std::sort( v.begin(), v.end(), grName() ) ;
      std::copy( v.begin(), v.end(), std::ostream_iterator<S>( std::cout, "") ) ;
      std::cout << std::endl ;
      return 0 ;
    }
    Salut.

  10. #10
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut
    Salut encore,

    Si je reprends la solution de Loufoque :

    std::vector<std::pair<AnsiString, long> > toto;

    et que j'ajoute les données suivantes à mon vecteur :
    toto.push_back(make_pair("salut", 1));

    Comment je fais pour accéder au long seulement ?

  11. #11
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut
    Ah d'accord !

    Je viens de trouver la réponse : il faut utiliser "first" et "second"
    pour accéder aux deux éléments de la paire.

    Merci !

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

Discussions similaires

  1. Temps d'exécution TList et TStringList
    Par QAYS dans le forum Langage
    Réponses: 15
    Dernier message: 16/10/2008, 15h16
  2. Comment bien gerer la mémoire avec les TStringList?
    Par david_chardonnet dans le forum Langage
    Réponses: 5
    Dernier message: 18/06/2003, 09h57
  3. TStringList en array of string
    Par JediKerian dans le forum Langage
    Réponses: 2
    Dernier message: 20/03/2003, 15h37
  4. Transtyper element d'1 variable pointant sur TList?
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 25/02/2003, 22h53
  5. TStringList
    Par giaco dans le forum Composants VCL
    Réponses: 3
    Dernier message: 17/09/2002, 13h50

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