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 :

Les ensembles en C++


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm� Avatar de YuGiOhJCJ
    Profil pro
    �tudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par d�faut Les ensembles en C++
    Bonjour,

    Je viens de tester les ensembles en C++.
    Mon exemple [1] porte sur un ensemble de personnes.
    Ce qui m'int�resse avec les ensembles, c'est la propri�t� "chaque �l�ment de l'ensemble est unique" (c'est � dire qu'il ne peut pas y avoir deux membres identiques).
    J'ai �t� oblig� de surcharger l'op�rateur "inf�rieur �" (operator<) pour pouvoir ins�rer des �l�ments dans mon ensemble. Sinon, j'ai une erreur � la compilation me disant que l'op�rateur manque.
    Je ne suis pas tr�s satisfait de ma surcharge d'op�rateur car � l'int�rieur, je compare le nom des personnes. Il se pourrait que deux personnes aient le m�me nom. Le mieux serait de se baser sur l'adresse des objets (avec &). Mais quand je remplace le code, j'ai 5 personnes dans mon ensemble au lieu de 3. C'est le m�me r�sultat que si j'�cris de renvoyer vrai.

    Est-ce que vous avez une solution satisfaisante pour la surcharge de mon op�rateur ?

    Merci.

    [1]

    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
    #include <string>
    #include <iostream>
    #include <set>
    #include <vector>
    using namespace std;
    class Person
    {
    	private:
    		string name;
    	public:
    		Person(string name);
    		virtual string getName()const;
    };
    Person::Person(string name)
    {
    	this->name = name;
    }
    string Person::getName()const
    {
    	return this->name;
    }
    bool operator<(const Person& person1, const Person& person2)
    {
    	return person1.getName() < person2.getName();
    }
    ostream& operator<<(ostream& os, const Person& person)
    {
    	os << person.getName();
    	return os;
    }
    int main()
    {
    	Person p1("Toto");
    	Person p2("Tata");
    	Person p3("Tutu");
    	set<Person> persons;
    	persons.insert(p1);
    	persons.insert(p1);
    	persons.insert(p1);
    	persons.insert(p2);
    	persons.insert(p3);
    	set<Person>::iterator it;
    	/*
    	vector<Person> persons;
    	persons.push_back(p1);
    	persons.push_back(p1);
    	persons.push_back(p1);
    	persons.push_back(p2);
    	persons.push_back(p3);
    	vector<Person>::iterator it;
    	*/
    	for(it = persons.begin(); it != persons.end(); it++)
    	{
    		cout << *it << endl;
    	}
    }

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    Bonjour,

    Tu va stocker des Person, donc tu vas effectuer une copie pour ins�rer tes �l�ments, il est donc normal que les adresses ne soient plus les m�me.

    Donc soit tu dois stocker un pointeur sur un Person soit tu dois int�grer un identifiant dans chaque Person.

    Exemple :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Person
    {
               Person(void);
               static TypeId compteur;
               TypeId id;
    };
     
    Person::compteur = 0;
     
    Person::Person(void) : id(compteur++)
    {
    }

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    Bonjour

    Si on utilise des pointeurs, on peut pas d�finir un op�rateur < (Person*, Person*)
    Mais d'un autre c�t�, avoir un op�rateur < pour Person n'a pas de sens (voir la s�mantique d'entit�)
    Il faut utiliser des pointeurs en donner un operateur Less<Key> sp�cifique dans le set

    Si 2 personnes ont le m�me nom, comment distingues tu ces 2 personnes ? (pr�nom ? date de naissance ? num�ro de s�cu ?) Il suffit que l'op�rateur Less prenne plusieurs param�tres

  4. #4
    Membre confirm� Avatar de YuGiOhJCJ
    Profil pro
    �tudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par d�faut
    gbdivers>C'est clair que si je compl�te ma classe Person avec un attribut num�ro de s�curit� sociale, le probl�me est r�solu car j'aurai un identifiant unique pour comparer mes personnes. Mais j'essaie de voir si je peux m'en sortir sans modifier les propri�t�s de ma classe Person et de travailler plut�t avec l'adresse en m�moire des objets.

    Neckara>Ah oui d'accord je travaille avec des copies... Je pr�f�re ne pas ajouter de propri�t�s � ma classe pour g�rer �a. Je vais essayer avec l'adresse en m�moire des objets. Dans ce cas il me suffit de faire un set de Person* au lieu de faire un set de Person. C'est bien �a ?

  5. #5
    Membre Expert

    Avatar de germinolegrand
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Octobre 2010
    Messages
    738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de D�me (Auvergne)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Par d�faut
    La solution qui me semble appropri�e est bien le set<Person*>. Tu devrais d'ailleurs interdire la copie de Person, �a t'�viterait quelques bugs incompr�hensibles

    @gbdivers: s'il utilise un set de pointeurs, il n'y a aucun int�r�t � sp�cialiser Less...

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    @germinolegrand
    Je pensais � un Less pour comparer en fonction des propri�t�s des objets et non de leurs adresses

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Th�orie des ensembles] Simplifications d'expressions
    Par UiYuki dans le forum Math�matiques
    R�ponses: 17
    Dernier message: 02/04/2016, 02h09
  2. include avec les ensembles?
    Par fthdz dans le forum Langage
    R�ponses: 2
    Dernier message: 09/09/2008, 09h54
  3. L'op�rateur "in" et les ensembles
    Par nic1319 dans le forum Langage
    R�ponses: 7
    Dernier message: 16/10/2007, 01h22
  4. [2.0] Comment r�aliser des op�rations sur les ensembles ?
    Par Cereal123 dans le forum Framework .NET
    R�ponses: 2
    Dernier message: 23/10/2006, 13h01
  5. Th�orie sur les groupes et les ensembles
    Par grav dans le forum Algorithmes et structures de donn�es
    R�ponses: 6
    Dernier message: 02/02/2005, 18h24

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