MrKro
Messages postés4Date d'inscriptiondimanche 9 octobre 2005StatutMembreDernière intervention 6 décembre 2006
-
6 déc. 2006 à 11:08
HSylvio
Messages postés116Date d'inscriptionjeudi 22 juillet 2004StatutMembreDernière intervention14 juin 2012
-
23 juin 2010 à 18:11
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?
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 6 déc. 2006 à 21:01
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;
HSylvio
Messages postés116Date d'inscriptionjeudi 22 juillet 2004StatutMembreDernière intervention14 juin 2012 23 juin 2010 à 18:11
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!!)