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