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 :

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;
}
Pouvez-vous m'aider à modifier mon opérateur qui prend des pointeurs et compare les objets pointés.
Merci.