hashes son bastante buenos, pero la mejor estructura es trie. Puede obtener un trie de <ext/pb_ds/assoc_container.hpp>
en GCC. Ver 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;
}
Sólo map
funcionalidad -como, no una pura set
, se proporciona. En la muestra anterior agregué un dummy int
como datos para mapear a ... realmente no debería doler mucho.
Lo que duele es que esto no funcionará fuera de GCC.
Por otro lado, una tabla hash -standard no (no std::
o ext::
nada) le permitiría sólo para encontrar coincidencias aproximadas, es decir, a buscar entre las sumas de comprobación de palabras en lugar de las palabras mismas. Esa sería la solución más rápida y compacta. Los diccionarios basados en Bloom filters pueden contener muchos miles de palabras en algunos kilobytes.
Existen archivos C++ DS proporcionados por la biblioteca estándar, como mapas, conjuntos, etc. Entonces, ¿cuál es el mejor DS para buscar una cadena? Leeré todas las cadenas y buscaré. – brett