Gli hash sono piuttosto buoni, ma la struttura migliore è un trie. Puoi ottenere un trie da <ext/pb_ds/assoc_container.hpp>
in GCC. Vedi 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;
}
Solo map
funzionalità -come, non un puro set
, è fornito. Nell'esempio sopra ho aggiunto un dummy int
come dati da mappare a ... non dovrebbe fare molto male.
Ciò che fa male è che questo non funzionerà al di fuori di GCC.
D'altra parte, un non -standard tabella di hash (non std::
o ext::
nulla) consentirebbe di trovare solo corrispondenze approssimative, vale a dire da ricercare tra checksum di parole al posto delle parole stesse. Questa sarebbe la soluzione più veloce e più compatta. Dizionari basati su Bloom filters possono contenere molte migliaia di parole in pochi kilobyte.
Ci sono C++ DS forniti dalla libreria standard come mappe, set ecc. Quindi qual è il DS migliore per cercare una stringa. Leggerò tutte le stringhe e la ricerca. – brett