Un file di testo contiene qualcosa che per un essere umano è intelleggibile: di solito lettere e numeri; un file binario è tutto il resto (di cui il file di testo è un insieme di grosso modo 70 caratteri).

(*)Se hai l'obbligo (o necessità) che il file sia sempre intelleggibile (da te o da altri), non c'è molto da fare.

Se invece non è necessario (o si può eventualmente rimandare in altro momento), puoi usare un file binario per memorizzare i dati.
Le precondizioni sono (in sostanza):
1) avere sempre cinquine ( o anche inferiori tipo quaterne etc.)
2) che i numeri non superino il 90.
Dato che si parla di lotto, direi che sono verificate.

In soldoni la mia idea si basa nell'impacchettare i cinque dari in una struttura e scriverla in modo binario nel file. In questo modo ti eviti di parserizzare le varie linee, cercando vari "\n", virgole e in generale di perdere tempo nella ricerca nel file.
Essendo i numeri inferiori a 90 i dati si possono memorizzare tranquillamente in tipi char (per risparmiare spazio).

Un esempio molto grezzo che spero renda l'idea.
codice:
// Struttura di memorizzazione.
struct estrazione {
    char primo_estratto;
    char secondo_estratto;
    char terzo_estratto;
    char quarto_estratto;
    char quinto_estratto;
};

// calcoli vari delle combinazioni
vector<estrazione> combinazioni;
...
// N dev'essere un valore valido ovviamente.
combinazioni[N].primo_estratto = 10;
combinazioni[N].secondo_estratto = 20;
combinazioni[N].terzo_estratto = 30;
combinazioni[N].quarto_estratto = 40;
combinazioni[N].quinto_estratto = 50;

// scrittura di tutte le combinazioni in un file.
file.write(reinterpret_cast<const char*>(&combinazioni[0]),combinazioni.size()*sizeof(estrazione));

// scrittura di una singola combinazione in un file
file.write(reinterpret_cast<const char*>(combinazioni[N]),sizeof(estrazione));

// ricerca della N riga 
file.seekg( N*sizeof(estrazione), ios::beg);

// lettura della N riga.
estrazione estr.
file.read(reinterpret_cast<char*>(&estr),sizeof(estrazione));
// eventuali rielaborazioni.
...
// output. Il cast a int serve per mostrare il numero e non il carattere corrispondente.
cout << (int) estr.primo_estratto << endl;
cout << (int) estr.secondo_estratto << endl;
cout << (int) estr.terzo_estratto << endl;
cout << (int) estr.quarto_estratto << endl;
cout << (int) estr.quinto_estratto << endl;
(*) Ovviamente se non è vera la precondizione segnata.