Die Implementierung eines C++ - hashtable-Klasse, die mit Vorlage

Ich versuche zu implementieren ist eine hashtable in C++, dass in der Art, wie Sie die Java-version

Ich würde es gerne, hat die form

template <class Key, class Value> 
class hashtable {
...
}

Schon bald merke ich, dass ich brauchen, um irgendwie konvertieren Schlüssel in eine Reihe, so dass ich verwenden können, die einfache hash-Funktion

int h(int hashkey) { 
    return hashkey%some_prime;
}

Aber die Kopfschmerzen, Schlüssel-Typ ist nur bekannt, zur Laufzeit. Ist es möglich zu überprüfen, welche Art Key ist zur Laufzeit in C++. Oder ich habe zum erstellen dieser hashtable-Klasse, die mit verschiedenen Art manuell? Das ist einfacher zu tun, aber hässlich. Weiss jemand eine elegante Lösung?

  • Haben Sie sich überlegt std::unordered_map statt?
  • Die Implementierung einer Hashtabelle ist eine gute Lernübung, aber Sie wollen, schauen Sie in die Dokumentation (und ggf. den code) für Billy ' s Vorschlag auf std::unordered_map, um Ihnen den Einstieg erleichtern.
  • Danke für die Anregung! Ich bin eigentlich eine Lern-übung, und ich darf hinzufügen möchten, in-house-Merkmal dieser Implementierung später. Eine dumme Frage, wo kann ich auf die Implementierung von std:unordered_map?
  • wie wäre hash_map?
  • Wenn Sie interessiert sind, im Blick auf die Implementierung von std::unordered_map, die auf einer linux-Maschine, es beginnt in der Regel in /usr/include/c++/<your_version>/unordered_map, und auf der Suche nach anderen header-Dateien enthalten, wie tr1_impl/hashtable. Allerdings ist es nicht trivial zu verstehen, die Umsetzung.
  • machen Sie Ihre hash-Funktion, der Dritte parameter der Vorlage.

InformationsquelleAutor Alfred Zhong | 2013-01-02
Schreibe einen Kommentar