questo mio cod funziona egregiamente ma...

codice:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
#include <iomanip>


using namespace std;

string intToString(int value) {
    stringstream ss;
    ss << value;
    return ss.str();
}

string floatToString(float value) {
    stringstream ss;
    ss << value;
    return ss.str();
}


int main (int argc, char *argv[]) {

//dichiarazioni...

vector <string> vec;
vector <string> vec2;
int contapunti=0;
int presenze=0;
int conteggio=0;
vector <int> ritardi;
int contaestrazioni=0;
vector <string> riassunto;

//---------------------

cout << "\n\n\n"; 
cout << "Programma created by Lotto_tom75.\nOgni diritto riservato.\n\n";
cout << "\n\n\n"; 
cin.get();

ifstream fin("quaterneuscite.txt");
if (fin) {
   string s;
   while(fin) // cattura tutti gli errori.
   {
      getline(fin,s); 
      
      //cout << s;
      vec.push_back(s);
   }
}

int sz = vec.size()-1;



ifstream f2in("estrazioni.txt");

if (f2in) {
   string s;
   while(f2in) // cattura tutti gli errori.
   {
      getline(f2in,s); 
      
      //cout << s;
      vec2.push_back(s);
   }
}

int sz2 = vec2.size()-1;



for (int z=0; z<sz; z++)  {


string testo,estratta;
  vector<string> token;
  int inizio,fine,i,lparola;
  bool continua;

  testo = vec[z];


  continua = true;
  inizio = -1;	/*1*/
  while(continua){

    fine = testo.find(',',inizio+1);	


    if(fine==-1){	
      continua = false;
      fine = testo.length();	
    }

    // Estrazione parola

    lparola = (fine-inizio)-1;	
    estratta = testo.substr(inizio+1,lparola);	
    token.push_back(estratta);	

    inizio = fine;	
  }



for (int z2=0; z2<sz2; z2++)  {


string testo2,estratta2;

  vector<string> token2;

  int inizio2,fine2,x,lparola2;

  bool continua2;

  testo2 = vec2[z2];


  continua2 = true;
  inizio2 = -1;	/*1*/
  
  while(continua2){

    fine2 = testo2.find(',',inizio2+1);	

    // ultima parola

    if(fine2==-1){	
     continua2 = false;
     fine2 = testo2.length();	
    }

    // Estrazione parola

    lparola2 = (fine2-inizio2)-1;	
    estratta2 = testo2.substr(inizio2+1,lparola2);	
    token2.push_back(estratta2);	

    inizio2 = fine2;
  }



  for(x=0;x<token2.size();x++)
    

 
    //CONTROLLO EVENTUALI VALORI UGUALI E AGGIORNAMENTO INDICI RELATIVI xE (conteggio) e xA (conteggio2)..

    
    for (int y=0; y<token2.size();y++) {
        
        
        
    for (x=0; x<token.size();x++)   {

        
     if (token2.at(y)==token.at(x)) {    
       
      
      //cout << "VALORE/I UGUALE/I: ";
      //cout << token2.at(y);
      //cout << "Vs";
      //cout << token.at(x);
      //cin.get();
      
      contapunti++;
      
      }  
      
      else
      
      {    
 
      //cout << "VALORE/I DIVERSO/I: ";
      //cout << token2.at(y);
      //cout << "Vs";
      //cout << token.at(x);
      //cin.get();
      
      } 
      

      
      
    }  
    

          
    } 

    contaestrazioni++;
    //cout << "PUNTI X QUESTA QUATERNA: ";
    //cout << contapunti;
    //cout << "\n";
    
    if (contapunti==2) {
     
     presenze++;
     conteggio=0;
     ritardi.push_back(conteggio);    
     
     //cin.get();              
                       
    }      
    else  {
     
     conteggio++;
     ritardi.push_back(conteggio);                  
                       
    }          
    
    cout << "tutti i ritardi per questa estrazione: ";
    for (int i=0; i< ritardi.size(); i++) 
    
    {
     
  //cout << ritardi[i];
  //cout << ",";                
                       
    }         
    
    //prendo il valore massimo e il valore ultimo di ritardo della quaterna esaminata...
   vector<int>::iterator max;
   max = max_element(ritardi.begin(), ritardi.end());
   cout << *max << endl;
   cout << ritardi[ritardi.size()-1] << endl;
   int ritardomassimo =*max;
   cout << "\n";
   cout << "ritardo massimo per questa quaterna: ";
   cout << ritardomassimo;
   
   
   
   int ritardoultimo = ritardi[ritardi.size()-1];
   
   cout << "\n";
   cout << "ritardo ultimo per questa quaterna: ";
   cout << ritardoultimo;

    
   int colpirimanenti = *max-(ritardi[ritardi.size()-1]);
   
   cout << "\n";
   cout << "colpi rimanenti per questa quaterna: ";
   cout << colpirimanenti;
   
   //cin.get();
   
   //conversione in stringhe...
   
    //string rapportorars2;
    string contaestrazioni2;
    string colpirimanenti2;
    string ritardomassimo2;
    string ritardoultimo2;
    string presenze2;
    
    
    colpirimanenti2 = intToString(colpirimanenti);
    ritardomassimo2 = intToString(ritardomassimo);
    ritardoultimo2 = intToString(ritardoultimo);
    presenze2 = intToString(presenze);
   
   //--------------------------
   
   
   string stringariassuntiva = "presenze:"+presenze2+"°***quaterna:"+testo+"***"+" rs: "+ritardomassimo2+" ra: "+ritardoultimo2+" colpirimanenti: "+colpirimanenti2;
   riassunto.push_back(stringariassuntiva);
    
   
   
   
   //cin.get();
   
    cout << "\n\n";   
    cout << "Quaterna : ";
    cout << testo;
    cout << "\n\n";
    
    cout << "Elaborazione n. ";
    cout << contaestrazioni;
    cout << "\n";
    //cin.get();
    
        //RIAZZERO TUTTO X ANALIZZARE LA PROSSIMA QUATERNA...
    
    //ritardi.clear();
    //conteggio=0;
    contapunti=0;
    //contaestrazioni=0;
    //presenze=0;
    //riassunto.clear();
    //presenze=0;
    ritardomassimo=0;
    ritardoultimo=0;
    

    
   

}

printf ("\a");

//SALVO IN UN FILE... il risultato dell'elaborazione quaterna... -------------------
    
    ofstream fout;


	fout.open("report-ritardi-quaterne-uscite-punti2.txt", ios::app);
             string datoultimo= riassunto[riassunto.size()-1];
	fout << datoultimo;
	fout << "\n";
    
    presenze=0;
    riassunto.clear();

//---------------------------------------------------------------------------------- 
   
    
        //RIAZZERO TUTTO X ANALIZZARE LA PROSSIMA QUATERNA...
    
    ritardi.clear();
    conteggio=0;
    contapunti=0;
    contaestrazioni=0;
    presenze=0;
    riassunto.clear();
    presenze=0;


}

 

printf ("\a\a\a");
cout << "finish prima quaterna...";
cin.get();

}
Per la sua struttura (temo...) è incredibilmente lento...
(ci mette ca 6 giorni per confrontare le 22.000 righe ca del primo file con le 4600 righe dell'altro)

Penso che una struttura analoga ma con basi + pratiche e logiche possa essere enormemente più veloce ed ottenere i medesimi risultati...

Qualcuno/a è in grado di tentarne l'ottimizzazione in termini di velocità?

GRAZIE a tutti/e