# Catalogo Compilazione Fallita

**URL:** <https://forum.olinfo.it/t/catalogo-compilazione-fallita/7415>\
**Category:** Aiuto\
**Created:** [8 Giugno 2022, 12:16pm UTC](https://forum.olinfo.it/t/catalogo-compilazione-fallita/7415 "2022-06-08T12:16:21Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sixes](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/s/54ee81/32.png) [@Sixes](https://forum.olinfo.it/u/Sixes)\
**Post date:** [8 Giugno 2022, 12:16pm UTC](https://forum.olinfo.it/t/catalogo-compilazione-fallita/7415/1 "2022-06-08T12:16:21Z")

</div>

ho provato con diversi compiler e funziona tutto alla perfezione, ma quando poi provo ad usarlo come soluzione ricevo come errore “Compilazione fallita”.

```auto
#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;
}

```

---

<div class="post-metadata">

**Author:** ![bortoz](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/b/7c8e57/32.png) [@bortoz](https://forum.olinfo.it/u/bortoz)\
**Post date:** [8 Giugno 2022, 1:44pm UTC](https://forum.olinfo.it/t/catalogo-compilazione-fallita/7415/2 "2022-06-08T13:44:43Z")

</div>

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

```auto
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`](https://en.cppreference.com/w/cpp/container/map/emplace):

```auto
libreria.emplace(id, 1);

```

---

<div class="post-metadata">

**Author:** ![Sixes](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/s/54ee81/32.png) [@Sixes](https://forum.olinfo.it/u/Sixes)\
**Post date:** [8 Giugno 2022, 3:08pm UTC](https://forum.olinfo.it/t/catalogo-compilazione-fallita/7415/3 "2022-06-08T15:08:26Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![v.bizzarri](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/v/7c8e57/32.png) [@v.bizzarri](https://forum.olinfo.it/u/v.bizzarri)\
**Post date:** [8 Giugno 2022, 5:36pm UTC](https://forum.olinfo.it/t/catalogo-compilazione-fallita/7415/4 "2022-06-08T17:36:02Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![bortoz](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/b/7c8e57/32.png) [@bortoz](https://forum.olinfo.it/u/bortoz)\
**Post date:** [8 Giugno 2022, 6:38pm UTC](https://forum.olinfo.it/t/catalogo-compilazione-fallita/7415/5 "2022-06-08T18:38:50Z")

</div>

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`:

- [`map::erase`](https://en.cppreference.com/w/cpp/container/map/erase): Complexity: `log(c.size())` + […].
- [`vector::erase`](https://en.cppreference.com/w/cpp/container/vector/erase): Complexity: Linear […].

Ti consiglio quindi di guardarti [nella documentazione](https://en.cppreference.com/w/cpp/container/map) i vari metodi che puoi utilizzare con una `std::map` e la loro complessità. In particolare, quello probabilmente più utile è l’[`operator[]`](https://en.cppreference.com/w/cpp/container/map/operator_at).

---

<div class="post-metadata">

**Author:** ![Sixes](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/s/54ee81/32.png) [@Sixes](https://forum.olinfo.it/u/Sixes)\
**Post date:** [8 Giugno 2022, 7:09pm UTC](https://forum.olinfo.it/t/catalogo-compilazione-fallita/7415/6 "2022-06-08T19:09:46Z")

</div>

Ho risolto, grazie mille per l’aiuto!
