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; } }
Partager