operator pour std::set avec des pointeurs
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:
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.