if (myfile.is_open()) {
int anno;
string nome;
float tempo;
string luogo;
string a;
string t;
Item it;
int count = 0;
while (getline(myfile, a, ':')) {
istringstream token(a);
token >> anno;
getline(myfile, t, ':');
istringstream token2(t);
token2 >> tempo;
getline(myfile, nome, ':');
getline(myfile, luogo);
Item it(anno, nome, tempo, luogo);
count++;
bubblesort(L1);
L1.moveToStart();
if (count < 12 ) // se il contenuto di un certo campo dell'item , risulta essere diverso dal valore di confronto , allora
L1.append(it); // lo si inserisce in coda nella lista
else
Albero.insert(it);
}
}
dopo aver aperto un file nel formato ( anno , nome , tempo , luogo ) devo inserire i primi 12 item con campo tempo più piccoli in una lista mentre gli altri in un albero. per risolverlo ho pensato
1) a mano a mano che estrapolo gli elementi dal file li ordino
2) contemporaneamente imposto a zero un contatore che incremento ogni volta che creo un item
3) imposto la condizione per la quale se il contatore è < 12 allora l'item viene inserito in lista altrimenti nell'albero
se tolgo la condizione la lista mi viene ordinata correttamente , quindi probabilmente il mio ragionamento è sbagliato.. ho pensato anche che , dato che senza la condizione l'ordinamento è giusto , si tratterebbe 'solo' di lasciare nella lista i primi 12 item ( poichè già ordinata ) e togliere gli altri. poi gli item tolti inserirli nell'albero
non capisco se il mio ragionamento ha un minimo di senso ma l'ho scritto male o se proprio non ha ne capo ne coda.
l'argoritmo di ordinamento che ho utilizzato è
void bubblesort(List<Item>& L) {
for (int i = 0; i < (L.length() - 1); i++) {
for (int j = (L.length() - 1); j > i; j--) {
L.moveToPos(j);
Item it_j = L.getValue();
L.moveToPos(j - 1);
Item it_jj = L.getValue();
if (it_jj.gettempo() > it_j.gettempo())
{
L.moveToPos(j);
Item removed = L.remove();
L.moveToPos(j - 1);
L.insert(removed);
}
}
}
}