Il modo migliore per memorizzare il dizionario dal file

1

Sto lavorando su un traduttore in C ++. Fondamentalmente voglio analizzare il file con le traduzioni e memorizzarlo nel mio programma, così posso eseguire la ricerca attraverso le parole e accedere semplicemente alla parola corrispondente . Il mio file sarà simile a questo:

word|translation
second word|second translation

ecc. Non deve essere | come delimitatore e la parola può contenere spazi. Quindi, dopo averlo memorizzato nel mio programma, voglio cercare una parola e ottenere facilmente la parola corrispondente.

La domanda è, qual è il modo migliore per memorizzare questo dizionario? Dovrei usare strutture dinamiche e collegarle? Forse i vettori? O dovrei usare array bidimensionale per memorizzare le 2 stringhe? Potresti per favore propormi come sarà la struttura?

    
posta sobol6803 30.03.2013 - 18:18
fonte

3 risposte

5

Dato che stai cercando la prima parola, ti suggerirei di usare una Hashmap.

Una Hashmap è progettata per risolvere esattamente questo problema: cercare una chiave complicata; A volte viene anche chiamato "Dizionario", quindi sai che si tratta di questo. Funziona definendo una funzione (che è chiamata "funzione hash") dal dominio-chiave ("parola" nel tuo dizionario) a int, e quindi usa questi int come posizione in un array, dove memorizza sia la chiave originale che valore ("parola" e "traduzione"). Se il tuo input è identico ad un tasto, il risultato della funzione hash ti darà il tasto int giusto e potrai completare la tua ricerca molto velocemente.

Per ulteriori informazioni: link

Buona fortuna:)

    
risposta data 30.03.2013 - 18:28
fonte
2

Una soluzione da considerare è un database SQLite . SQLite, al contrario della maggior parte degli altri database, funziona bene come un database autonomo all'interno di un'applicazione. Ti fornisce supporto immediato per serializzare il tuo dizionario su disco, interrogare il tuo dizionario in molti modi, ecc.

SQLite è un costrutto di livello superiore rispetto ad un Hashmap; viene fornito con più funzionalità di cui avrà bisogno l'applicazione, riducendo così la quantità di lavoro di implementazione nell'applicazione.

Se hai già dimestichezza con SQL, SQLite è generalmente una vittoria immediata in alternativa ai formati di file ad hoc.

    
risposta data 30.03.2013 - 18:42
fonte
0

I tre approcci principali a questo hanno approcci fondamentalmente diversi e dipendono davvero da quali sono i tuoi requisiti.

Hai un dizionario di qualche tipo. In molte lingue, dictionary è sinonimo di Map e questo ci porterà lungo i diversi percorsi.

Il primo approccio consiste nell'utilizzare un database di qualche tipo. È possibile archiviarlo in un database reale esterno al sistema: Oracle, MSSQL, MySQL, PostgreSQL sono i grandi nomi che vengono in mente. Con questo approccio, il motore di database fa tutto il lavoro per cercare le cose e completamente esterno alla tua applicazione. Questo ha il vantaggio che è possibile lavorare con strumenti esterni, ma ha il vantaggio che è esso stesso uno strumento esterno.

Il prossimo è il più semplice database incorporato. Berkley Database, opzionalmente attraverso SQLLite come livello per rendere l'accesso ai dati un po 'più familiare alla famiglia SQL. Il database Berkley stesso riempirà il ruolo di coppie chiave di valori (è una semplice mappa hash dietro le quinte). Ciò significa ottenere altre librerie (ma non strumenti) per memorizzare i tuoi dati.

Comprendendo che questo è un dizionario di testo ci sono strutture dati specifiche che sono ottimizzate per elaborare strutture di testo. Il trie è un albero specializzato per lavorare con il testo. Questa è solo una delle molte strutture dati: le specifiche dipendono davvero da cosa stai facendo con i tuoi dati una volta che li hai. La mappa hash è un altro modo per memorizzare i dati dopo che sono stati letti (e ci sono anche molte forme della mappa hash).

Potresti scoprire che qualcos'altro funziona meglio - dipende da cosa stai facendo, quanti dati hai, dal rapporto tra letture e scritture (ci sono mai delle scritture?), conoscendo la dimensione dei dati prima della mano oppure no, se vuoi essere in grado di effettuare ricerche su dati parziali, ecc ... Tutte queste cose dovrebbero entrare in gioco nella scelta della struttura dati corretta.

    
risposta data 31.03.2013 - 03:56
fonte

Leggi altre domande sui tag