Ho una lista contenente item nel formato <anno , tempo , nome , luogo> e devo scrivere un codice che per ciascun <luogo> presente nella lista (senza ripetizioni) stampi il numero totale di atleti che hanno quel <luogo> come attributo.
per esempio avendo L1 < (2009,9.58,Usain Bolt,Berlin) (2012,9.63,Usain Bolt,London) (2008,9.69,Usain Bolt,Beijing) (2007,9.74,Asafa
Powell,Rieti) (2014,9.56,Usain Bolt,London)| >
dovrei ottenere
London 2 -
Beijing 1
Berlin 1
Rieti 1
mentre io ottengo , con il codice che riporto qui sotto , < | ( London , 5 ) , ( Rieti , 4) , (Beijing , 3 ) , ( London , 2 ) , (Berlin , 1 ) >
la mia idea era quella di:
1) scorrere la lista L1 ( fatta di Item nel formato ANNO,TEMPO,NOME,LUOGO )
2) estrarre a mano a mano 2 item
3) se i due item estratti hanno campo 'luogo' uguale allora incremento un contatore
diversamente passo all'elemento di confronto successivo
4) memorizzo il luogo e contatore e li inserisco in l2 come elementi del tipo della classe conteggio , che riporto qui sotto
Item it1;
Item it2;
conteggio i;
int conta = 0;
LList<conteggio> L2;
string luogo;
for (L1.moveToStart(); L1.currPos() < L1.length(); L1.next()) {
it1 = L1.getValue();
it2 = L1.getValue();
if (it1.getluogo() == it2.getluogo()) // Found
{
conta++;
luogo = it1.getluogo();
}
else L1.next();
// in it inserisco conta e luogo
conteggio i(luogo , conta);
L2.insert(i);
}
cout << endl;
cout << " LISTA L2: " << endl;
lprint(L2);
la classe Item funziona senza problemi , qui sotto riporto la classe conteggio che ho creato successivamente. ho pensato di inserire in una seconda lista l2 elementi del tipo ( luogo , totale ) così ho creato questa classe :
class conteggio {
private:
string luogo;
int totale;
public:
conteggio() { }
conteggio(string l, int t) { totale = t ; luogo = l; }
int gettotale() const { return totale; }
string getluogo() const { return luogo; }
};