Comparaison dans une set

Signaler
Messages postés
4
Date d'inscription
dimanche 9 octobre 2005
Statut
Membre
Dernière intervention
6 décembre 2006
-
Messages postés
116
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
14 juin 2012
-
Je vous explique,
Je dois débugger une application qui gère de très grosse structure de donnéees, des Nodes. Elle utilise des set de la STL afin de les stocker. Les opérateurs de comparaison sont surchargés {operator< (Nodes)}. Cependant, en passant l'executable dans un profiler, on se rend compte que de nombreux appels à des méthodes de construction et de destruction. Je suppose que ces nombreux appels sont du a de la recopie. En rajoutant une référence au comparateur, plus rien ne compile.

Je suppose donc qu'il est impossible de travailler avec des références sur les opérateurs de comparaison dans la STL, est ce que quelqu'un a deja eut ce genre de problème ou peux confimer ou infirmer mes pensées?

Merci

2 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
20
Salut, je ne comprend pas quant tu dis une "référence au comparateur"
Par défaut, le set implémente les comparaisons grace au pointeur de fonction key_comp()


class NODE
{
   friend bool operator < (const NODE& n1, const NODE& n2)
   {
      // bla bla
      return true;
   }
};


// Par defaut LESS THAN (utilise operator < du node)
set<NODE> n;
n.key_comp()(node1, node2);
// Si node1 < node2 returne true;


De quelle référence parles-tu ?
Messages postés
116
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
14 juin 2012

Bonsoir,

je sais que ce message date un peu, mais j'essaie depuis quelques heures d'utiliser un set d'objets.

J'ai redéfini les opérateurs de ce type d'objets, mais j'ai toujours une erreur :

[quote="elCompilo"]C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xtree(1413) : error C2061: erreur de syntaxe : identificateur '_Wherenode'
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xtree(1408) : lors de la compilation de la fonction membre '' de la classe
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\set(57) : voir la référence à l'instanciation de la classe modèle 'std::_Tree<_Traits>' en cours de compilation
1> with
1> [
1> _Traits=std::_Tset_traits<SimEvent,std::less<SimEvent>,std::allocator<SimEvent>,false>
1> ]
1> d:\users\housseman\chimiordo\SimEventsList.h(19) : voir la référence à l'instanciation de la classe modèle 'std::set<_Kty>' en cours de compilation
1> with
1> [
1> _Kty=SimEvent
1> ]/quote


Un forum conseille de changer la ligne 1413 de xtree de
new (_Wherenode) _Node(_Larg, _Parg, _Rarg, _Val, _Carg);
je l'ai donc changée pour
_Node _Wherenode(_Larg, _Parg, _Rarg, _Val, _Carg);


Et meme si l'erreur de copil a disparu j'ai (evidamment?) une erreur d'allocation de memoire dès mon premier insert.

Quelqu'un aurait-il un exemple d'utilisation de set d'objets, pour lesquels on doit définir les comparateurs si possible?? (des exemples avec des set y'en a plein $soft.com!!)

Merci d'avance.