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 :

Gestion de données


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Gestion de données
    Bonjour à tous, et merci de prendre le temps de lire mon post.

    Voila ,je débute un peu sur le langage c++ et j'ai un petit problème dans mon programme, pour la gestion de mes données:

    En effet, elles s'organisent de la manière suivante:

    J'ai une tableau de 2D(vecteurs de vecteurs), avec en ligne des points et en colone les différentes informations sur un point (coordonnées x , y ,z , le poids , etc )
    Malheureusement avec ce type de tableau, je ne peux pas manipuler les données, pour par exemple classer les points suivant la coordonnées x ou suivant un autre paramètres(voir même l'un après l'autre).
    Pour effectuer ces opérations, il faut à chaque fois que je réinvente la roue, en consommant beaucoup de mémoire et de temps pour mon programme.

    Je pense qu'il doit exister une meilleure solution mais étant donner que je n'ai pas beaucoup de bouteille en C++ , je m’adresse à vous, pour recueillir votre avis.

    Merci d'avance

    Cordialement

    PS: A la limite un lien vers un petit tuto bien sympa me va aussi ^^

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Pour commencer, tu devrais avoir une classe représentant tes "2D":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Bidule {
    private:
        //... des choses utiles
    public:
        int x() const;
        int y() const;
        int z() const;
        int poids() const;
    };
    En fait, avec cette classe, tu auras uniquement un std::vector<Bidule>, que tu pourra trier avec les fonctions de <algorithm>.

    Maintenant, je te recommande grandement la lecture de la faq sur ces deux points:


    Par contre, pour une aide pratique, il nous faudra un peu de ton code.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci à toi , j'ai grandement avancé dans mon programme, je rencontre maintenant un autre problème, je souhaite classer mes objets selon un ou plusieurs paramètres ( par exemple selon x , puis selon y). Je me base donc sur la fonction sort() , ou j'y définis mes booléens. Néanmoins si le nombre d’éléments constituants le vecteur est important, le "classement" déconne et je perd l'ordonement de mes variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int main()
    {
    .../...
    std::sort(myvector.begin(), myvector.end(),compareX);
    std::sort(myvector.begin(), myvector.end(),compareY);
    std::sort(myvector.begin(), myvector.end(),compareZ
    );

    résultat:


    0 0 1
    0 1 1
    0 1 2
    0 0 4
    0 1 2
    0 1 2
    0 1 1
    0 0 4
    la def de mes booleens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    bool compareX(const PointDatas lhs, const PointDatas rhs)
       { return (lhs.x <rhs.x); }
     
    bool compareY(const PointDatas lhs, const PointDatas rhs)
       { return (lhs.y<rhs.y); }
     
    bool compareZ(const PointDatas lhs, const PointDatas rhs)
       { return (lhs.z<rhs.z); }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class PointDatas
    {
     public:
     
     
     
      int x;
      int y;
      int z;
     
    };
    bool compareAzimuth(const PointDatas lhs,const PointDatas rhs);
    bool compareFrequency(const PointDatas lhs,const PointDatas rhs);
    bool compareNV(const PointDatas lhs,const PointDatas rhs);
    Merci d'avance

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Si la taille de ta matrice est connue à la compilation, utilise std::array plutôt que std::vector.

    Ensuite, pour effectuer un tri selon un critère arbitraire, utilise la fonction sort de la bibliothèque standard <algorithm>, et donne-lui un critère de tri.

    Voir l'exemple de code sur la doc de sort.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 345
    Points : 1 211
    Points
    1 211
    Par défaut
    Citation Envoyé par oodini Voir le message
    Ensuite, pour effectuer un tri selon un critère arbitraire, utilise la fonction sort de la bibliothèque standard <algorithm>, et donne-lui un critère de tri.

    Voir l'exemple de code sur la doc de sort.
    Hum ... c'est pas déjà ce qu'il fait ?

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oui en quelque sorte, en réalité mon problème est la méthode de classement utilisé par sort(). En effet, elle met en désordre les éléments du vecteur et je ne peux donc pas classer consécutivement mes objets selon plusieurs variables.

    Comme il me l'a conseillé je vais regarder du coté de Array.

  7. #7
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Chaque appel à sort ignore totalement l'ordre précédent de tri.

    En fait, tu dois avoir un seul appel à sort, qui utilise une fonction plus complexe.
    Quel est l'ordre à obtenir à la fin?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    C'est ce que je pensais ... Pardonnes moi, j'ai mal exprimé mon besoin , en gros je voudrais classer d'abord suivant z , puis suivant y et enfin suivant x.

  9. #9
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Et bien utilise une fonction qui décrit cet ordre complet, telle que la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    bool comparaison(PointDatas const& a, PointDatas const& b) {
        //z, puis y, puis x
        if (a.z < b.z) return true;
        if (b.z < a.z) return false;
     
        if (a.y < b.y) return true;
        if (b.y < a.y) return false;
     
     
        if (a.x < b.x) return true;
        return false;
    }
    Tu noteras l'usage d'une référence (constante) pour éviter de copier les objets, l'opération étant potentiellement couteuse.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  10. #10
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup

    Finalement, j'ai réussi a en faire un à ma sauce ^^:


    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
            if(lhs.x==rhs.x)
            {
                if(lhs.y==rhs.y)
                {
                    return (lhs.z < rhs.z);
                }
                else
                {
                    return (lhs.y < rhs.y);
                }
            }
                else
                {
                    return (lhs.x < rhs.x);
     
     
            }

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

Discussions similaires

  1. [Système] Système de gestion de donnée
    Par SpiritOfDoc dans le forum Langage
    Réponses: 11
    Dernier message: 03/04/2007, 18h22
  2. Réponses: 2
    Dernier message: 07/03/2007, 16h22
  3. Réponses: 9
    Dernier message: 09/05/2006, 16h11
  4. Réponses: 9
    Dernier message: 17/04/2004, 16h32
  5. Réponses: 3
    Dernier message: 24/11/2003, 17h41

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