Bonjour,
J'ai un std::set dans lequel je mets des objets (et non pas des pointeurs), j'ai redéfini l'opérateur < et tout fonctionne bien.
Maintenant je veux faire la même chose dans le cas où le std::set prend des pointeurs vers mes objets, j'ai ajouté un opérateur qui prend des pointeurs et compare les objets pointés mais quand j'insère mes pointeurs d'objets dans le std::set le code ne passe même pas dans cet opérateur (donc il ne compare rien et me rend des doublons). Voici mon code :
Pouvez-vous m'aider à modifier mon opérateur qui prend des pointeurs et compare les objets pointés.
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 class CNode { private: int m_nID; public: CNode() : m_nID{0} {} CNode(int n) : m_nID{n} {} bool operator <( const CNode& p ) const { return m_nID < p.m_nID; } // OK, working fine!!! bool operator <( CNode* p ) const { return m_nID < p->m_nID; } // Not working (it is not even passing through). void PrintID() const { cout << m_nID << endl; } }; int main() { CNode* pNode1 = new CNode{1}; CNode* pNode2 = new CNode{2}; CNode* pNode3 = new CNode{1}; std::set<CNode> setNode; setNode.insert(*pNode1); setNode.insert(*pNode2); setNode.insert(*pNode3); for (std::set<CNode>::iterator iter = setNode.begin(); iter != setNode.end(); iter++) { (*iter).PrintID(); } // With object it is working fine, only 2 objects: // 1 // 2 std::set<CNode*> setNode2; setNode2.insert(pNode1); setNode2.insert(pNode2); setNode2.insert(pNode3); cout << endl; for (std::set<CNode*>::iterator iter = setNode2.begin(); iter != setNode2.end(); iter++) { (*iter)->PrintID(); } // With pointers it is not working, three objects with duplicate: // 1 // 2 // 1 delete pNode1, pNode2, pNode3; return 0; }
Merci.
Partager