Hashe są całkiem dobre, ale najlepszą strukturą jest trie. Możesz dostać trie z <ext/pb_ds/assoc_container.hpp>
w GCC. Zobacz 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;
}
Tylko map
-jak funkcjonalność, a nie czysta set
, jest przewidziane. W powyższym przykładzie dodałem manekina int
jako dane do odwzorowania ... nie powinno to za bardzo szkodzić.
To, co jest nie tak, nie zadziała na zewnątrz GCC.
Z drugiej strony, non -standard tabeli mieszania (nie std::
lub ext::
cokolwiek) pozwoli Ci znaleźć tylko przybliżone wyniki, to znaczy, aby szukać wśród sum kontrolnych słów zamiast samych słów. To byłoby najszybsze i najbardziej kompaktowe rozwiązanie. Słowniki oparte na Bloom filters mogą zawierać wiele tysięcy słów w kilku kilobajtach.
C++ DS jest dostarczany przez standardową bibliotekę, taką jak mapy, zestawy itp. Więc który jest najlepszym DS do wyszukiwania ciągu. Przeczytam wszystkie ciągi s i szukam. – brett