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 :

Quel est le conteneur approprié ?


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par défaut Quel est le conteneur approprié ?
    Salut,

    Je cherche à représenter des données de type ts_info (structure) relatives à la combinaison de 2 objets que j'identifie par des indices i et j appartenant à 0..n (unsigned int).

    Chose importante : la combinaison de i et j est la même que celle de j et i.

    Mon but est bien sûr d'accéder le plus vite possible à la donnée ts_info connaissant i et j.

    Quel conteneur dois-je choisir ?

    Merci

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    n est fixe au moment de la compilation ou bien il est renseigné par un autre morceau de code ?

  3. #3
    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
    Salut.
    Avec le peut que tu nous dit, je dirait une
    std::map<std::pair<int,int>, ts_info>,
    Où std::pair<int,int> est ta combinaison i,j.
    A voir s'il ne faudrait pas que tu ajoute un prédicat pour le test < sur les pair.
    Ou peut être
    std::map<int, ts_info>, avec int = i*j

    Que vaut n?

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Salut.
    Avec le peut que tu nous dit, je dirait une
    std::map<std::pair<int,int>, ts_info>,
    Où std::pair<int,int> est ta combinaison i,j.
    A voir s'il ne faudrait pas que tu ajoute un prédicat pour le test < sur les pair.
    Ou peut être
    std::map<int, ts_info>, avec int = i*j

    Que vaut n?
    Le n est indéterminé au moment de la compilation...mais ça ne devrait pas poser de problème avec les possibilités d'allocation dynamique offertes par le C++.

    Je n'aime pas trop le map<pair<int, int>, ts_info> car une paire de i,j n'est pa la même chose qu'une paire de j,i , ça voudrait dire qu'il faut que je me force à n'utiliser que des paires où j > i par exemple et ensuite quand je demande le résultat pour i,j créer la paire dans le bon ordre.

    J'aime assez l'dée du i*j sauf que 5*6 = 10*3 donc il n'y a pas unicité de la clé dans la table de clés/valeurs.

    Il doit y voir quelque chose de mieux à faire...

  5. #5
    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 tnarol Voir le message
    Je n'aime pas trop le map<pair<int, int>, ts_info> car une paire de i,j n'est pa la même chose qu'une paire de j,i , ça voudrait dire qu'il faut que je me force à n'utiliser que des paires où j > i par exemple et ensuite quand je demande le résultat pour i,j créer la paire dans le bon ordre.
    Tu peut ajouter un prédicat a ta map pour faire ca

    J'aime assez l'dée du i*j sauf que 5*6 = 10*3 donc il n'y a pas unicité de la clé dans la table de clés/valeurs.
    Je savais bien qu'il y avait un truc qui cloche

    n est de quel ordre?

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Tu peut ajouter un prédicat a ta map pour faire ca

    n est de quel ordre?
    n est de l'ordre de quelques centaines.
    pour le prédiicat je ne connais pas du tout tu peux me donner un exemple ?

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par tnarol Voir le message
    J'aime assez l'dée du i*j sauf que 5*6 = 10*3 donc il n'y a pas unicité de la clé dans la table de clés/valeurs.
    min(i, j)*n + max(i,j)

    Mais ça revient à peu près au même que d'avoir une paire en clef, dont on aurait trié les valeurs.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Par défaut
    Citation Envoyé par tnarol Voir le message
    Je cherche à représenter des données de type ts_info (structure) relatives à la combinaison de 2 objets que j'identifie par des indices i et j appartenant à 0..n (unsigned int).

    Chose importante : la combinaison de i et j est la même que celle de j et i.

    Mon but est bien sûr d'accéder le plus vite possible à la donnée ts_info connaissant i et j.

    Quel conteneur dois-je choisir ?
    Est-ce que toutes les combinaisons (i,j) correspondent à un ts_info, ou seulement quelques unes?

    (Accessoirement : pourquoi utiliser des unsigned int?)

  9. #9
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Apparemment, un couple (i,j) équivaut au couple (j,i).
    De plus, un tel couple correspond à un et un seul ts_info ("bijection" => il n'y a que 2 couples pour un ts_info, donc ce n'est pas vraiment une bijection, mais si on raisonne en ensembles {i,j} on a bien une bijection).

  10. #10
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par défaut
    Citation Envoyé par Alp Voir le message
    Apparemment, un couple (i,j) équivaut au couple (j,i).
    De plus, un tel couple correspond à un et un seul ts_info ("bijection" => il n'y a que 2 couples pour un ts_info, donc ce n'est pas vraiment une bijection, mais si on raisonne en ensembles {i,j} on a bien une bijection).
    Pour répondre aux questions précédentes :

    - tous les couples i, j ont un ts_info associé
    - les couples i,j et j,i ont le même ts_info

    Finalement j'ai choisi une méthode un peu bourrine qui consiste à créer dynamiquement un tableau à 2 dimensions de pointeurs de ts_info (créé dynamiquement aussi) soit un " ts_info*** " . Pour éviter de me poser la question de l'ordre je copie simplement le même pointeur dans la case i,j et la case j,i.

    Mais si vous avez plus simple je prends.

  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 tnarol Voir le message
    Mais si vous avez plus simple je prends.
    Ben tu en as eux au moins deux

  12. #12
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Ben tu en as eux au moins deux
    Oui mais les deux impliquent un test de supériorité effectué au moment de l'appel qui potentiellement dégrade les performances (critère important pour moi) par rapport à la solution que j'ai employée.

Discussions similaires

  1. [TRIGGER] quel est le déclencheur approprié
    Par PSYcoZZ dans le forum Forms
    Réponses: 1
    Dernier message: 14/11/2009, 01h07
  2. D'apres vous, quel est langage approprié?
    Par shirya dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 31/01/2008, 09h47
  3. Réponses: 6
    Dernier message: 13/11/2007, 12h06

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