hash_map... Comment ça fonctionne ? [STL] - C++ - Programmation
Marsh Posté le 11-10-2005 à 19:47:07
C'est bon ! J'ai trouvé ! Ca fonctionnait pas à cause du namespace !
Sur certains compilateurs, il faut utiliser using namespace __gnu_cxx; et <ext/hash_map>
voici le code pour détécter:
#ifdef __GNUC__
#if __GNUC__ < 3
#include <hash_map.h>
#else
#include <ext/hash_map>
#if __GNUC_MINOR__ == 0
using namespace std; // Pour GCC 3.0
#else
using namespace __gnu_cxx; // Pour GCC 3.1 et plus
#endif
#endif
#else // Pour les autres compilateurs.
using namespace std;
#endif
C'est bien, je m'aide tout seul !
Marsh Posté le 11-10-2005 à 19:49:34
Il y a ici un exemple d'utilisation de l'implémentation Gnu avec un fonction de hachage sophitiquée.
http://forum.hardware.fr/hardwaref [...] 0175-2.htm
D'autres implémentations sont plus simples car elles ne nécessitent pas de préciser la fonction de hachage.
Attention à la consommation mémoire des gros hash_map.
Marsh Posté le 11-10-2005 à 19:50:44
utlise plutôt std::tr1::unordered_map<> présente dans gcc4
Marsh Posté le 11-10-2005 à 19:51:10
Reply
Marsh Posté le 11-10-2005 à 19:01:01
Salut à tous ! J'ai besoin d'utiliser les hash_map, mais hélas je suis vraiment novice là dedans...
Je voudrais faire un truc du style:
class Personne {
hash_map <int, string> _attributsPersonne;
[...]
}
void fonction() {
_attributsPersonne[crc32("nom" )] = "djardjar";
_attributsPersonne[crc32("prenom" )] = "beans";
}
J'ai donc créé une fonction de hachage crc32, mais hélas, le compilateur n'accepte pas la définition de hash_map.
Message d'erreur:
personne.h ISO C++ forbids declaration of `hash_map' with no type
personne.h expected `;' before '<' token
J'ai essayé avec les typename, mais ça fonctionne pas non plus (pas de classe template).
J'ai déjà lu les anciens sujets à ce propos, mais soit je n'y comprend rien, soit y'a pas ce que je veux...
Aidez moi SVP .... !