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 :

Question sur set::set


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 62
    Par défaut Question sur set::set
    Bonjour

    Je suis en train d'utiliser std::set pour gérer un ensemble de personnes. Disons que j'ai une classe personne avec un entier décrivant le numéro de téléphone. J'utilise ce numéro de téléphone comme clé pour comparer deux personnes dans l'ensemble (p1 < p2 <=> p1.tel < p2.tel). J'insère donc les personnes au fur et a mesure avec la méthode insert
    Le problème survient lorsqu'une persone change de numéro de téléphone (je simplifie l'écriture)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    iterator i=personnes.find(numéro);
    if(i != personnes.end()) i->SetNuméro(nouveau_numéro);
    Mais la bien sur la personne n'est plus au bon endoit dans l'ensemble.
    Je voudrais donc savoir quelle est la meilleure solution selon vous:
    -Continuer ainsi, mais en enlevant et en réinsérant l'objet à chaque fois
    -Utiliser comme clé quelque chose qui ne change pas (mais ce n'est pas toujours possible...)

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    S'il n'est pas possible d'avoir une clé constante alors tu n'as pas le choix, il faut retirer puis réinsérer l'élément.

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 943
    Par défaut
    Salut,

    Citation Envoyé par socrate
    Mais la bien sur la personne n'est plus au bon endoit dans l'ensemble.
    Je voudrais donc savoir quelle est la meilleure solution selon vous:
    Citation Envoyé par socrate
    -Continuer ainsi, mais en enlevant et en réinsérant l'objet à chaque fois
    C'est une methode efficace si tu ne doit pas faire trop de changement.
    Dans ton cas, la solution est viable car de tout maniere ton algo est constructif
    et non iteratif, du coup tu effectueras cette operation ponctuellement et meme si elle est couteuse en ressource cela ne changeras rien a l'execution du programme.


    Citation Envoyé par socrate
    -Utiliser comme clé quelque chose qui ne change pas (mais ce n'est pas toujours possible...)
    La ca depend de toi, si tu veux un annuaire inverser, tu doit prendre le tel pour retrouver la personne correspondante. C'est sur que si tu prends son nom tu es tranquille (quoi que si elle se marie ou divorce) mais ce n'est plus la meme fonction du coup.

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    L'*idéal*, c'est de gérer tes clés sur base d'une valeur absolument unique et qui ne risque pas de changer (numéro de sécu ou numéro de registre nationnal par exemple).

    Meme un algorithme qui créerait un identifiant sur base du nom, du prénom et d'une date de naissance ne serait pas sécuritaire à 100%...

    Ne riez pas: je connais une personne qui, s'étonnant de ne pas avoir recu sa déclaration d'impôts s'est entendu répondre "c'est normal, madame, vous êtes morte depuis deux ans"...

    Simplement, il y avait deux homonymes, nées à la meme date, et ils s'étaient trompés lors du déces de l'une d'elle...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 62
    Par défaut
    Merci pour toutes vos réponses.
    En fait le problème est un peu le même que celui des clé primaires des bases de données si je comprends bien

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par socrate
    Merci pour toutes vos réponses.
    En fait le problème est un peu le même que celui des clé primaires des bases de données si je comprends bien
    Exactement...

    Finalement, ce que tu fais, c'est "simplement" "réinventer les bases de données"...

    (pour rappel: une base de données n'est pas exclusivement informatique )

    Maintenant, rien ne t'empeche, une fois que la personne est identifiée de manière unique et immuable, de créer des index sur les différents champs, mais tu seras toujours confronté au choix épineux entre quelque chose permettant la mise à jour rapide avec une faible redondance, mais une recherche "plus lente" et quelque chose présentant une forte redondance, permettant une recherche rapide mais ralentissant la mise à jour des données...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Question sur méthodes set/get
    Par tamerla dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 07/02/2014, 00h35
  2. Question sur union-set
    Par pierrotlenageur dans le forum SL & STL
    Réponses: 1
    Dernier message: 04/11/2008, 15h20
  3. question sur les listes/set/vector
    Par deubelte dans le forum SL & STL
    Réponses: 11
    Dernier message: 04/01/2007, 20h41
  4. question sur les "set/list"
    Par deubelte dans le forum C++
    Réponses: 12
    Dernier message: 29/12/2006, 01h16
  5. question sur les listes/set/vector
    Par deubelte dans le forum SL & STL
    Réponses: 16
    Dernier message: 28/12/2006, 20h17

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