Il metodo più veloce è caricare l'intero file in memoria, quindi cercare nella memoria.
La prossima alternativa migliore è quella di mantenere il disco rigido in movimento. Forse ha un thread che legge blocchi di dati in un buffer e un altro thread che cerca nel buffer.
Scendendo alla lista, leggendo grandi blocchi di dati in un buffer, la ricerca del buffer è una buona tecnica, sebbene non efficiente come i metodi precedenti.
È possibile leggere linea per linea, utilizzando std::getline
e std::string
. Non è veloce quanto la lettura di blocchi perché la funzione di input sta cercando il carattere di nuova riga (e l'allocazione della memoria nello std::string
).
Il caso peggiore è probabilmente la lettura carattere per carattere. Il sovraccarico della funzione è negativo per la lettura di un singolo carattere (in genere il sovraccarico è lo stesso per la lettura di un grande blocco di dati).
No, non esiste una funzione di libreria C++ standard per la ricerca di file. Alcuni sistemi operativi dispongono di utilità per la ricerca di file; forse puoi usare uno di quelli.
Edit 1:
Il collo di bottiglia è l'immissione dei dati. Una volta ottenuti i dati in un buffer, esistono molti algoritmi di ricerca efficienti piuttosto che la forza bruta (cercare la prima lettera, quindi cercare le lettere successive, ecc.).
Cercare in Internet "algoritmo di ricerca stringa".
fonte
2016-02-22 17:40:59