Bonjour,
Je tente actuellement de faire une liste triée d'objet de type Vertex*.
Je vous met les fichiers vertex.hpp et vertex.cpp
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 #ifndef VERTEX_HPP #define VERTEX_HPP class Vertex { public: // Constructeur Vertex (float x, float y, float z); // Accesseur en lecture seulement const float &x () const; const float &y () const; const float &z () const; private: float _x, _y, _z; }; // Opérateur de comparaison bool operator== (const Vertex &v1, const Vertex &v2); bool operator!= (const Vertex &v1, const Vertex &v2); bool operator> (const Vertex &v1, const Vertex &v2); bool operator<= (const Vertex &v1, const Vertex &v2); bool operator< (const Vertex &v1, const Vertex &v2); bool operator>= (const Vertex &v1, const Vertex &v2); #endif /* VERTEX_HPP */Pour faire une liste triée j'ai donc besoin de pouvoir comparer mes vertex : c'est pour cela que j'ai surchargé les opérateurs de comparaison.
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 #include "vertex.hpp" /* Constructeur : */ Vertex::Vertex (float x, float y, float z) { _x = x; _y = y; _z = z; } /* Accesseur : en lecture seulement */ const float &Vertex::x () const { return _x; } const float &Vertex::y () const { return _y; } const float &Vertex::z () const { return _z; } /* Opérateur : */ bool operator== (const Vertex &v1, const Vertex &v2) { return ((v1.x() == v2.x()) && (v1.y() == v2.y()) && (v1.z() == v2.z())); } bool operator!= (const Vertex &v1, const Vertex &v2) { return (!(v1 == v2)); } bool operator> (const Vertex &v1, const Vertex &v2) { if (v1.x() > v2.x()) return true; else if (v1.x() < v2.x()) return false; if (v1.y() > v2.y()) return true; else if (v1.y() < v2.y()) return false; if (v1.z() > v2.z()) return true; else if (v1.z() < v2.z()) return false; return false; } bool operator<= (const Vertex &v1, const Vertex &v2) { return (!(v1 > v2)); } bool operator< (const Vertex &v1, const Vertex &v2) { if (v2.x() > v1.x()) return true; else if (v2.x() < v1.x()) return false; if (v2.y() > v1.y()) return true; else if (v2.y() < v1.y()) return false; if (v2.z() > v1.z()) return true; else if (v2.z() < v1.z()) return false; return false; } bool operator>= (const Vertex &v1, const Vertex &v2) { return (!(v1 < v2)); }
Pour faire ma liste triée de vertex je me suis orienté vers la classe QSet pensant que son utilisation serait simple sauf que lorsque je crée plusieurs objet Vertex
et que en suite je les rajoute dans mon QSet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Vertex *v1 = new Vertex (...); Vertex *v2 = new Vertex (...); Vertex *v3 = new Vertex (...); Vertex *v4 = new Vertex (...);
alors les éléments ne sont pas triés comme je le voudrais.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 QSet <Vertex *> _vertex; _vertex.insert(v1); _vertex.insert(v2); _vertex.insert(v3); _vertex.insert(v4);
J'ai également remarqué que pour utiliser mes opérateur de comparaison je devais
utilisé (*var) : Ainsi
Comment je dois donc faire pour avoir un QSet trié ou pour que mes opérateur de comparaison surchargé n'envoie pas une réponse érroné pour (a == b).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if (v1 == v2) // Erroné if ((*v1) == (*v2)) // Bon
Merci d'avance.
Partager