ho provato con diversi compiler e funziona tutto alla perfezione, ma quando poi provo ad usarlo come soluzione ricevo come errore “Compilazione fallita”.
#include <map>
std::map<long long int,int> libreria;
void aggiungi(long long int id) {
int check = 0;
std::map<long long int,int>::iterator it;
for(it = libreria.begin(); it != libreria.end(); it++)
if(it->first == id){
it->second++;
check = 1;
}
if(!check)
libreria.insert(pair<long long int,int>(id,1));
}
void togli(long long int id) {
std::map<long long int,int>::iterator it;
for(it = libreria.begin(); it != libreria.end(); it++)
if(it->first == id)
it->second--;
}
int conta(long long int id) {
std::map<long long int,int>::iterator it;
for(it = libreria.begin(); it != libreria.end(); it++)
if(it->first == id)
return it->second;
return 0;
}
grazie mille, ora il programma funziona ma per l’ennesimo tentativo ricevo 50/100… qualche consiglio su come arrivare a 100? credo che il problema sia la lentezza per programma, ma non sono sicuro.
Il grosso vantaggio di utilizzare una std::map invece di un std::vector è che la std::map memorizza i suoi valori all’interno di un binary search tree. Cioè permette di inserire, rimuovere e cercare i valori molto più velocemente rispetto ad un std::vector standard.
Nella documentazione puoi trovare la complessità dei vari metodi, ad esempio per il metodo erase:
Ti consiglio quindi di guardarti nella documentazione i vari metodi che puoi utilizzare con una std::map e la loro complessità. In particolare, quello probabilmente più utile è l’operator[].