Originariamente inviato da Neptune
Ora il mio arduo () compito è stato quello di sviluppare la funzione di erase, che è si fatta:

codice:
template<class K, class E>
void hash_table<K,E>::erase(const K& k)
{
	if( find(k) != NULL)
	{
		  // search the table for a matching element
		  int b = search(k);
                  delete find(k);
		  table[b] = NULL;
	}

}
Il dubbio è questo, la funzione di cancellazione non fa altro che vedere se l'elemento che vuoi cancellare effettivamente esiste con la prima condizione, se esiste ne cerca la posizione nella tabella (si lo so non è molto ottimizzato questo codice), dealloca (con delete) la coppia mypair (che ti ritorna da find) e poi setta a NULL il puntatore nella tabella.

E' tutto giusto così?

Cioè se io mettessi solo a null il puntatore sulla tabella ma non mettessi quel delete rimarebbe allocato il mio spazio di memoria no?
Esatto. Forse però dovresti anche decrementare dsize, visto che quando inserisci un elemento lo incrementi.

La funzione find è questa:

codice:
template<class K, class E>
mypair<K, E>* hash_table<K,E>::find(const K& the_key)
{
  // search the table
  int b = search(the_key);
  // see if a match was found at table[b]
  if (table[b] == NULL || table[b]->first != the_key)
    return NULL;  // no match
  return table[b]; // matching pair
}
Ovvero non dovrebbe far altro che ritornare, nel caso esiste il puntatore proprio all'indirizzo della coppia mypair.

Dite che è giusto? con i puntatori non si è mai sicuri al 100%
Dovrebbe essere giusto.