Catalogo Compilazione Fallita

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;
}

Nei dettagli della sottoposizione vengono mostrati anche gli errori di compilazione. Guardandoli troveresti un messaggio del tipo:

catalogo.cpp:14:25: error: ‘pair’ was not declared in this scope; did you mean ‘std::pair’?
   14 |         libreria.insert(pair<long long int,int>(id,1));

Che vuol dire che devi aggiungere std:: prima di pair. Alternativamente puoi anche (e te lo consiglio) sostituire insert con emplace:

libreria.emplace(id, 1);

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.

Se proprio vuoi cercare un dato id guardati il metodo find().

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[].

Ho risolto, grazie mille per l’aiuto!