Hashes sind ziemlich gut, aber die beste Struktur ist eine trie. Sie können einen Trie von <ext/pb_ds/assoc_container.hpp>
in GCC erhalten. Siehe the online reference.
#include <ext/pb_ds/assoc_container.hpp>
#include <string>
#include <iostream>
int main() {
pb_ds::trie< std::string, int > dict;
dict.insert(std::make_pair("hello", 3));
std::cerr << (dict.find("hello") != dict.end()) << std::endl;
std::cerr << (dict.find("goodbye") != dict.end()) << std::endl;
}
Nur map
-ähnlichen Funktionalität, kein reines set
, vorgesehen. In dem obigen Beispiel habe ich einen Dummy int
als Daten hinzugefügt, um ... zuzuordnen, es sollte nicht wirklich viel weh tun.
Was tut weh ist, dass dies nicht außerhalb von GCC funktioniert.
Auf der anderen Seite, ein nicht -Standard Hash-Tabelle (nicht std::
oder ext::
etwas) erlaubt es dir, nur ungefähre Übereinstimmungen zu finden, das heißt unter Prüfsummen von Wörtern anstelle der Worte selbst zu suchen. Das wäre die schnellste und kompakteste Lösung. Wörterbücher basierend auf Bloom filters können viele tausend Wörter in wenigen Kilobyte enthalten.
Es gibt C++ DS von der Standard-Bibliothek zur Verfügung gestellt wie Karten, Sets usw. Also das ist die beste DS nach einer Zeichenfolge zu suchen. Ich werde alle Saiten lesen und suchen. – brett