0Pricing
C++ Academy · Aula

std::map

Armazenamento ordenado de chave e valor

std::map é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

O que é std::map?

std::map armazena pares chave-valor ordenados pela chave. Cada chave é única, e consultas, inserções e remoções têm custo logarítmico.

  • As chaves são mantidas em ordem crescente.
  • Baseia-se em uma árvore de busca binária balanceada.
#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;
}

Inserindo elementos

Você pode inserir com operator[], insert() ou emplace(). Usar [] com uma chave ausente cria essa chave com um valor padrão.

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

Percorrendo em ordem

Percorrer um std::map visita as chaves em ordem crescente. Cada elemento é um std::pair com .first (chave) e .second (valor).

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

Encontrando chaves

Use find() para procurar uma chave com segurança. Ele retorna um iterador para o elemento ou end() se a chave não for encontrada.

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

Verificando a existência

Para verificar se uma chave existe sem criá-la, use count() (retorna 0 ou 1) ou contains() no 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;
}

Atualizando valores

Atribuir novamente uma chave atualiza seu valor no próprio local. O mapa mantém apenas um valor por chave.

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

Removendo elementos

erase() remove um elemento pela chave ou pelo iterador. Quando recebe uma chave, retorna o número de elementos removidos.

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

Usando at()

at() retorna uma referência ao valor de uma chave e lança std::out_of_range se a chave estiver ausente. Diferentemente de [], nunca insere elementos.

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

Contando a frequência das palavras

Um uso clássico de std::map é contar ocorrências. O operador [] inicializa novas chaves com o valor 0 por padrão, portanto, ++ funciona diretamente.

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

Vinculações estruturadas

O C++17 permite desempacotar cada par com vinculações estruturadas, atribuindo nomes legíveis à chave e ao valor.

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

Verificando se está vazio

empty() informa se o mapa não tem elementos, e clear() remove tudo de uma vez.

#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ção rápida

Teste sua compreensão da ordenação de std::map.

Recapitulação

Você aprendeu que std::map:

  • armazena chaves únicas e ordenadas associadas a valores
  • oferece suporte a insert, [], find, count, at e erase
  • percorre as chaves em ordem crescente, usando pares que podem ser desempacotados por meio de vinculações estruturadas

Em seguida, você verá std::set, usado para armazenar apenas valores únicos e ordenados.

Perguntas Frequentes

A aula “std::map” é grátis?

Sim — o texto completo de “std::map” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “std::map”?

Armazenamento ordenado de chave e valor Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “std::map”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. std::map
  2. std::set
  3. multimap e multiset
  4. Comparadores personalizados
← Voltar para C++ Academy