MAP (::STL) - Definir un nouvel operateur de comparaison - C++ - Programmation
Marsh Posté le 26-05-2005 à 14:37:17
operator[] s'occupera du insert, mais peut etre que la 1ere facon est moins efficace car une paire temporaire est créée, je ne suis pas sur
Marsh Posté le 30-05-2005 à 17:27:24
J'ai lu qu'il faut definir un nouvel operateur de comparaison dans le "paramètre template des classes des conteneurs".
Je transforme donc mon type en objet, c'est ca ?
source : http://casteyde.christian.free.fr/ [...] x8797.html
Marsh Posté le 30-05-2005 à 17:30:41
Mais j'ai lu ailleur qu'il fallait aussi un "constructeur par défaut (sans argument)".
http://www.sm.u-bordeaux2.fr/~parisy/C++/stl.php
et aussi
http://www.sgi.com/tech/stl/Map.html
Marsh Posté le 30-05-2005 à 17:41:35
oui lit la doc, surcharge d'operator< pour le type ? ou un foncteur en 3e param template, ca doit etre detaille dans la doc
Marsh Posté le 20-06-2005 à 11:11:55
depuis tout ce temps,
j'ai completement compris la surcharge de l'operateur <
je comprend aussi assez bien les classes de la stl
je connais la notion de template
mais je voudrais savoir s'il y a besoin de surcharger l'operateur [] et l'operateur d'affectation pour pouvoir utiliser un nouveau type (classe) dans une map
Code :
|
car sans rien d'autre, à l'usage, j'ai le message d'erreur suivant :
error C2679: '=' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'int' (ou il n'existe pas de conversion acceptable)
sur une ligne comme ca :
m_FullMGmaterial2TRPGmaterial[matMG]=matTRPG;
matMG de type MGElement
matTRPG de type int
Marsh Posté le 20-06-2005 à 11:36:24
Je vous refait un resumé, d'un autre point de vue :
je veux définir une map comme ca :
Code :
|
il me faut donc tout le necessaire pour que le type (c'est une classe) MGElement soit accepté par map..
comment faire ?
(j'ai deja defini < pour info)
c'est quasiment comme pour le type "complex" pour lequel on trouve pas mal de documentation sur le net.
Neanmoins, je n'arrive pas à trouver les infos necessaires et suffisantes pour surcharger mon type afin que "map" accepte sans broncher
j'ai un message :
error C2677: '[' binaire : aucun opérateur global trouvé qui accepte le type 'MGElement' (ou il n'existe aucune conversion acceptable)
car je veux utiliser m_FullMGmaterial2TRPGmaterial[matMG]
bien sur je peux definir un iterator, mais bon
Marsh Posté le 20-06-2005 à 14:53:33
vous êtes pathétique, c'est incroyable. Bon alors comment faire
Code :
|
et retournez à vos bounquin relire le chapitre sur les const. Et par pitié arrêtez avec les friend, c'est pas parce que votre enseignant est incapable qui faut le suivre aveuglément. Pas de friend.
Marsh Posté le 20-06-2005 à 16:44:07
je comprends pas bien l'heritage de la ligne 10... ca signifie quoi i(ii) ? c'est pas une classe i
Sinon, si j'ai 2 entiers : i1 et i2 au lieu d'avoir seulement 1 entier i , que dois-je ecrire.
Je fouille mes livres pour repondre de mon coté.
Code :
|
parceque c'est bon, j'ai corrigé l'histoire de l'operateur de comparaison, mais pour l'instant, je ne peux toujorus pas faire de toto[truc] = machin
Marsh Posté le 20-06-2005 à 18:10:06
y a pa d'héritage. Et c'est parce que c'est pas une classe qu'il n'y a pas de constructeur.
Marsh Posté le 20-06-2005 à 21:42:46
Je voudrai etre certains que la partie
# Foo(int ii)
# : i(ii)
# { }
Concerne bien les operateurs permettant l'utilisation directe dans un map de
truc map <Foo, int>;
Foo f;
truc[f] = 3;
Car chez moi, sans rien faire, le compilateur me repond que l'operateur [ n'est pas defini.
Et aussi comment adapter ca à int i1, i2; ????? Car c'est aussi là que je bloque.
Code :
|
C'est ca ?
Marsh Posté le 26-05-2005 à 14:29:35
Bonjour,
j'aurai voulu connaitre la difference en ces deux facon d'ajouter un element dans un MAP (STL) ?
Est-ce que ca produit une différence ?
Maintenant la question est plus sur l'operateur de comparaison
voici les 2 map ausquels je veux rajouter un operateur de comparaison (repectivement pour le type Material et string) (peut etre que ca existe deja pour string ? je crois que oui - donc la question se pose pour Material
typedef std::map<Material, int> T_TrpgMat;
typedef std::map<string, int> T_TrpgTexture;
Pouvez vous me donner la methode generale, s'il vous plait ?
Message édité par NounouRs le 30-05-2005 à 16:50:45