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 :

Créer une méthode qui renvoie un vector à deux dimensions.


Sujet :

SL & STL C++

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut Créer une méthode qui renvoie un vector à deux dimensions.
    Bonjour, je souhaite créer une méthode permettant de renvoyer une valeur et son association.

    En l'occurence, je cherche à récupérer un vector à partir de cette méthode, qui liste des numéros de trames, ainsi que leur longueur associée.

    Exemple :

    N° de trame Taille
    1 5
    2 4
    3 7

    quelqu'un aurait-il une idée ?

    Merci beaucoup pour vos réponses !

  2. #2
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    ah je crois que j'ai trouvé, il faut utiliser std::map pour les hachages ..

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 264
    Points : 6 683
    Points
    6 683
    Billets dans le blog
    2
    Par défaut
    en effet, il y a l'objet map.
    Sinon, tu peux créer un objet à toi qui contiendrais 2 vecteurs. Cela peut s'avérer pratique dans le cas où tu aies besoin d'effectuer des opérations spécifiques sur tes tableaux, auquel cas il te suffira d'implémenter les méthodes correspondante.

  4. #4
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    ca m'a l'air tout à fait intéressant, en effet je me heurte à un problème, à présent, je cherche à trier ma table de hachage selon la deuxieme correspondance.

    Premier problème (non le pire), il s'agit d'une table <string, string>
    peut-on trier des strings selon leur valeur ?

    Ces valeurs ne sont que des valeurs entieres. Exemple :

    <7:1264>, puis <2:789764> et <4:2>

    et je veux obtenir un tableau ayant la forme :

    <2:789764>
    <7:1264>
    <4:2>

    soit la deuxieme partie triée dans l'ordre décroissant. Que me conseillez vous ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut
    Une map a une utilisation bien particulière.
    Son but est de retrouver rapidement un objet à partir d'une clé...
    Elle n'est pas optimisée pour être parcourrue...

    Si ton but est simplement de classer les objets selon un critère, tu peux utiliser une simple liste (std::list) ou un vecteur (std::vector).
    tu combines l'un des deux avec une pari (std::pair) et c'est bon... ça ressemblera à une map, sans les alogos de hash.

    Sinon, tu peux en effet introduire un criètre de comparaison spécifique pour une map : c'est le troisième paramètre du template... en personnalisant de cette façon, tu peux tout faire : trier par rapport à tes valeurs plutot que par rapport à tes clés, mais je ne vois plus trop l'intérêt d'utiliser une map...

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    ok merci pour l'info !

    en fait je vais faire un vector de vector, je pense que c'est la meilleure solution pour mon probleme

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut
    si tu manipules des couples, moi je dirais que le vector de pair est plus approprié...

  8. #8
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Si les valeurs que tu manipules sont des nombre porquoi les mettre dans des chaines de caractères ????

  9. #9
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    en fait je vais déclarer un vector de type :

    vector < vector<int> > mon_tableau

    mais je ne sais pas comment rajouter une valeur dans ce tableau (est-ce pareil que pour les tableaux C ? mon_tableau[i][j] ?

    EDIT :

    j'ai tenté :

    vector< vector<int> > table;
    table[0].push_back(2);
    cout << table[0][0];
    ca plante, comme si table[0][0] était vide ...

  10. #10
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut
    Salut, la façon de faire est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // le vector de vector de int
    vector < vector<int> > table ;
     
    // tu crées un vector de int dans lequel tu mets la valeur 2
    vector<int> vector0;
    vector0.push_back(2);
     
    // tu mets ce vector de int dans le vector de vector de int
    table.push_back(vector0);
    Mais je pense, comme le dit silverhawk.os, que c'est pas la meilleure méthode : créer un vector<int> juste pour mémoriser un seul int, c'est pas terrible. Avec les std::pair, c'est plus adapté.

    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
    #include <utility>
    #include <vector>
    using namespace std;
     
    // creation d'un vector de pair de <int, int>
    std::vector< std::pair<int, int> > table;
     
    // tu crée une pair
    pair<int, int> tableElement;
     
    // tu définis ces 2 éléments
    tableElement.first = 26;
    tableElement.second = 687;
     
    // tu insères la pair dans ton vector de pair
    table.push_back(tableElement);
     
    // autre façon, en utilisant "make_pair", qui renvoir directement une pair à partir des 2 arguments
    table.push_back(make_pair(12,35));
     
    // pour accéder à tes pairs
    // (table contient maintenant 2 pairs (26;687) et (12;35))
    int pair1_first = (table.begin() + 0)->first;
    int pair1_second = (table.begin() + 0)->second;
    int pair2_first = (table.begin() + 1)->first;
    int pair2_second = (table.begin() + 1)->second;
    C'est quand même plus propre et plus joli, non ?

    Qu'est-ce qu'elle belle cette librairie standart

    Par contre, si le 1er indice de tes couples est croissant de 1 en 1, pourquoi t'utilises tout simplement pas un vector<int> ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    vector<int> table;
    table.push_back(5);
    table.push_back(4);
    table.push_back(7);
    C'est pas suffisant, ça ?

    A+

    Flo.

  11. #11
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    en fait, apres je souhaite trier les valeurs de ce tableau par ordre décroissant. Mais je cherche à conserver le numéro correspondant à la valeur.

    Exemple :

    1:12
    2:5
    3:45
    4:2

    deviendrait :

    3:45
    1:12
    2:5
    4:2

    ensuite, je cherche à créer un vector 3 dimensions contenant à la fois deux valeurs entieres et une string (table variable).
    Dois-je créer un vector de la maniere suivante :

    vector< vector< vector <string> > table;

    ?

    Merci pour vos éclaircissements et merci Flo pour cette réponse exhaustive !

  12. #12
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 264
    Points : 6 683
    Points
    6 683
    Billets dans le blog
    2
    Par défaut
    Dans ce cas, je ferais comme suit

    Tu encapsule ton vector de pairs dans une classe à toi:
    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
    class MonVecteurDePaires
    {
    public:
    //constructeur et destructeur
    [...]
     
    voir AddPair(int nbre1, int nbre2); 
    void AddPair(std::pair paire); //surcharge de AddPair optionnelle, il faut voir si tu en a besoin selon le contexte
    std::pair GetPair(int index);
     
    DWORD MonTri();
     
    private:
    std::vector< std::pair<int, int> > m_table;
    };
    Ensuite, tu implémente les constructeurs, destructeurs, et les méthodes AddPair, GetPair et MonTri. Je le laisse les implémenter toi-même, sinon c'est pas rigolo

    Sinon, je ne sais pas ce que la méthode std::vector::sort() donnera sur des éléments de type std::pair. A voir.


    P.S: attention, je n'ai pas compilé le code ci-dessus. Il ne fonctionne certainement pas en l'état, c'est juste pour montrer la méthode.

  13. #13
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    j'ai fait mon petit code de mon coté, il marche, donc merci bien, sans vous les pairs me seraient encore inconnus :d

    ps : sort fonctionne avec des vectors de pairs

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

Discussions similaires

  1. Créer une fonction qui renvoie un vecteur
    Par Avatar36 dans le forum Langage
    Réponses: 22
    Dernier message: 15/05/2014, 12h59
  2. Réponses: 1
    Dernier message: 23/08/2013, 15h12
  3. [WD17] Créer une procédure qui renvoie plusieurs valeurs
    Par meganulos dans le forum WinDev
    Réponses: 9
    Dernier message: 27/02/2013, 20h21
  4. créer une macro qui renvoie à une cellule vide
    Par cachou52fr dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 17/06/2011, 14h11
  5. Réponses: 8
    Dernier message: 24/03/2010, 14h01

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