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