0Pricing
C++ Academy · Lezione

std::map

Memorizzazione ordinata di coppie chiave-valore

std::map è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.

Che cos'è std::map?

std::map memorizza coppie chiave-valore ordinate per chiave. Ogni chiave è univoca e le operazioni di ricerca, inserimento ed eliminazione hanno complessità logaritmica.

  • Le chiavi vengono mantenute in ordine crescente.
  • La struttura è basata su un albero binario di ricerca bilanciato.
#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> ages;
    ages["Alice"] = 30;
    ages["Bob"] = 25;
    std::cout << "Alice is " << ages["Alice"] << '\n';
    return 0;
}

Inserire elementi

È possibile inserire elementi con operator[], insert() o emplace(). Utilizzando [] su una chiave mancante, questa viene creata con un valore predefinito.

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> m;
    m["one"] = 1;
    m.insert({"two", 2});
    m.emplace("three", 3);
    std::cout << m.size() << " entries\n";
    return 0;
}

Iterazione ordinata

Iterare su una std::map visita le chiavi in ordine crescente. Ogni elemento è una std::pair con .first (chiave) e .second (valore).

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> m{{"banana", 3}, {"apple", 5}, {"cherry", 1}};
    for (const auto& p : m) {
        std::cout << p.first << " = " << p.second << '\n';
    }
    return 0;
}

Trovare le chiavi

Utilizzi find() per cercare una chiave in modo sicuro. Restituisce un iteratore all'elemento oppure end() se la chiave non viene trovata.

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> m{{"x", 10}, {"y", 20}};
    auto it = m.find("y");
    if (it != m.end()) {
        std::cout << "Found y = " << it->second << '\n';
    } else {
        std::cout << "Not found\n";
    }
    return 0;
}

Verificare l'esistenza

Per verificare se una chiave esiste senza crearla, utilizzi count(), che restituisce 0 o 1, oppure contains() in C++20.

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> m{{"a", 1}};
    std::cout << m.count("a") << '\n';
    std::cout << m.count("z") << '\n';
    return 0;
}

Aggiornare i valori

Riassegnare una chiave aggiorna il suo valore in loco. La map mantiene un solo valore per ogni chiave.

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> score;
    score["player"] = 10;
    score["player"] += 5;
    std::cout << score["player"] << '\n';
    return 0;
}

Eliminare elementi

erase() rimuove un elemento tramite la chiave o un iteratore. Quando viene fornita una chiave, restituisce il numero di elementi rimossi.

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};
    m.erase("b");
    std::cout << m.size() << " left\n";
    for (const auto& p : m) std::cout << p.first << ' ';
    std::cout << '\n';
    return 0;
}

Utilizzare at()

at() restituisce un riferimento al valore associato a una chiave e genera std::out_of_range se la chiave manca. A differenza di [], non inserisce mai elementi.

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> m{{"k", 42}};
    std::cout << m.at("k") << '\n';
    std::cout << "size: " << m.size() << '\n';
    return 0;
}

Contare la frequenza delle parole

Un uso classico di std::map consiste nel contare le occorrenze. L'operatore [] inizializza automaticamente le nuove chiavi al valore predefinito 0, quindi ++ funziona direttamente.

#include <iostream>
#include <map>
#include <string>

int main() {
    std::string words[] = {"cat", "dog", "cat", "bird", "dog", "cat"};
    std::map<std::string, int> freq;
    for (const auto& w : words) freq[w]++;
    for (const auto& p : freq) std::cout << p.first << ": " << p.second << '\n';
    return 0;
}

Structured bindings

C++17 consente di scompattare ogni coppia con gli structured bindings, assegnando nomi chiari a chiave e valore.

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> m{{"red", 1}, {"green", 2}};
    for (const auto& [name, value] : m) {
        std::cout << name << " -> " << value << '\n';
    }
    return 0;
}

Verificare se è vuota

empty() indica se la map non contiene elementi, mentre clear() li rimuove tutti in una sola operazione.

#include <iostream>
#include <map>

int main() {
    std::map<int, int> m{{1, 1}, {2, 4}};
    std::cout << std::boolalpha << m.empty() << '\n';
    m.clear();
    std::cout << m.empty() << '\n';
    return 0;
}

Verifica rapida

Verifichi la comprensione dell'ordinamento di std::map.

Riepilogo

Ha imparato che std::map:

  • memorizza chiavi univoche e ordinate associate a valori
  • supporta insert, [], find, count, at ed erase
  • itera in ordine crescente per chiave, con coppie che è possibile scompattare tramite gli structured bindings

Successivamente vedrà std::set, che serve a memorizzare solo valori univoci ordinati.

Domande Frequenti

La lezione «std::map» è gratuita?

Sì — il testo completo di «std::map» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.

Cosa imparerò in «std::map»?

Memorizzazione ordinata di coppie chiave-valore Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C++ Academy?

Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «std::map»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C++ Academy?

Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. std::map
  2. std::set
  3. multimap e multiset
  4. Comparatori personalizzati
← Torna a C++ Academy