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,ateerase - 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.