wxHashMap créer KeyHasher et Keyequal
Voila j'ai créer une petite hashmap pour stocker des matériaux et des groupes de meshes .
La clef est le matériaux et l'objet le MesheGroupe
Chaque meshe est associé à un matériaux. Si celui-ci existe déja dans cette hashmap, j'ajoute la meshe au MesheGroupe. Problème il ne trouve jamais de matériaux. :(. Enfin si une fois mais il devrait l'avoir fait pleins de fois avant.
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
|
// hashing function
class MateriauxHash
{
public:
MateriauxHash() { }
#if wxUSE_STL && defined(HAVE_STL_HASH_MAP)
size_t operator()( const Materiaux* k ) const { return (size_t)k; }
#else
wxUIntPtr operator()( const Materiaux* k ) const { return wxPtrToUInt(k); }
#endif
MateriauxHash& operator=(const MateriauxHash&) { return *this; }
};
//comparison operator
class MatKeyEqual
{
public:
MatKeyEqual() { }
bool operator()( const Materiaux* a, const Materiaux* b ) const { return a->Compare(b); }
MatKeyEqual& operator=(const MatKeyEqual&) { return *this; }
};
WX_DECLARE_HASH_MAP( Materiaux*, MesheGroupe*, MateriauxHash, MatKeyEqual, HashMapLoadMatMeshe ); |
Code:
1 2 3 4 5 6 7 8 9 10
|
HashMapLoadMatMeshe::value_type avalue( aMateriaux,new MesheGroupe() );
HashMapLoadMatMeshe::Insert_Result aresultinsert = aHMLoadMatMeshe.insert(avalue);
if(!aresultinsert.second)
{//le matériaux existe déja
delete aMateriaux;
delete avalue.second;
}
aresultinsert.first->second->AddMeshe( aMeshe ); |
Ce code lance un test d'égalité lors d'une N ème insertion mais au deuxième il aurait déja dû le faire. Je comprend pas, pour chaque clef rajoutée, il devrait faire un test sur chaqu'une des clefs ? Là après en avoir inséré plusieurs il me fait un test et se révèle positif. Je comprend pas comment marche cette HashMap :cfou:
J'ai essayé avec des find et l'opérateur []
Mais ayant des pointeurs à lui passé, j'ai pas envie de lui laisser créer par défaut les MeshesGroupes.
Voici quelques liens:
http://www.wxwidgets.org/manuals/sta...wxhashmap.html
http://www.wxwidgets.org/wiki/index....Text_Templates
http://www.sgi.com/tech/stl/hash_map.html
EDIT: zut j'aurais du mettre le sujet dans wxwidget c++ (désolé me suis trompé)