Pourquoi avez-vous une variable globale pour votre table de hachage? Au lieu de cela, vous devriez probablement créer une structure ou une classe, qui peut contenir la taille de la table et un pointeur vers la table, et allouer dynamiquement sa mémoire. La taille par défaut est la suivante, mais vous pouvez passer une taille différente lors de la création de la table de hachage pour essayer différentes tailles.
class HashTable {
public:
HashTable(int size = 1010081) : m_size(size) {
m_table = new nlist *[m_size];
}
~HashTable() {
delete[] m_table;
}
// Define getters, setters, etc. here...
private:
int m_size;
struct nlist **m_table;
};
Note: Je suppose (basé sur le fait que vous essayez de mettre en œuvre votre propre table de hachage, et certaines de vos questions précédentes) que vous êtes intéressé à apprendre sur le bas niveau mise en œuvre d'une table de hachage, et donc je vous donne une réponse assez bas sur la façon d'allouer et libérer la mémoire vous-même. Dans un programme réel, utiliser std::vector
, comme décrit par plusieurs des autres réponses, serait probablement la bonne chose à faire, car cela réduit la quantité de comptabilité que vous devez faire vous-même. Là encore, dans un programme réel, vous ne voudriez probablement pas implémenter votre propre table de hachage, mais plutôt utiliser une implémentation de table existante comme hash_map
(non standard, mais largement disponible), boost::unordered_map
, ou std::tr1::unordered_map
(c'est sur la piste pour devenir un standard, et basé sur boost::unordered_map
).
Nous avons besoin de plus d'informations. Essayez-vous de redimensionner la table de hachage à la volée? Vous pourriez utiliser un 'std :: vector' à la place d'un tableau natif, mais vous devriez re-seau tout ce qui est déjà dans la table au moment de votre redimensionnement. –
re-seau ??????????? – SuperString
@SuperString Adrian signifie que si vous changez la taille d'un vecteur après l'avoir alloué, vous devrez recalculer les seaux dans lesquels chaque élément est. Je ne pense pas que vous demandiez de redimensionner une table de hachage existante, cependant, je pense que vous demandais simplement comment créer des tables de hachage de différentes tailles. –