std::unordered_map
Busca rápida baseada em hash
std::unordered_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 é unordered_map
std::unordered_map armazena pares de chave e valor em uma tabela de dispersão. Em média, as operações de busca, inserção e remoção levam tempo constante, mas os elementos não têm uma ordem definida.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> ages;
ages["Alice"] = 30;
ages["Bob"] = 25;
std::cout << ages["Alice"] << '\n';
return 0;
}map versus unordered_map
Escolha com base nas necessidades:
map: ordenado, com operações O(log n).unordered_map: não ordenado, com operações O(1) em média.
Use unordered_map quando você precisar apenas de buscas rápidas.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<int, std::string> m{{3, "c"}, {1, "a"}, {2, "b"}};
std::cout << m.size() << " entries (order not guaranteed)\n";
return 0;
}Inserir e atualizar
A mesma interface de map: use [], insert() ou emplace().
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m;
m["x"] = 1;
m.insert({"y", 2});
m.emplace("z", 3);
std::cout << m.size() << '\n';
return 0;
}Buscar com find
find() retorna um iterador ou end(). Isso evita inserir acidentalmente um valor padrão, como aconteceria com [].
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"a", 1}};
auto it = m.find("a");
if (it != m.end()) std::cout << it->second << '\n';
std::cout << "size: " << m.size() << '\n';
return 0;
}Verificar existência
count() retorna 0 ou 1, e o C++20 adiciona contains() para uma verificação booleana clara.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"key", 99}};
std::cout << m.count("key") << '\n';
std::cout << m.count("missing") << '\n';
return 0;
}Percorrer
Você pode percorrer os elementos, mas a ordem é não especificada. Nunca presuma que ela seja ordenada ou siga a ordem de inserção.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};
int total = 0;
for (const auto& [k, v] : m) total += v;
std::cout << "sum = " << total << '\n';
return 0;
}Remover
erase() remove pela chave e retorna a quantidade removida.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"a", 1}, {"b", 2}};
m.erase("a");
std::cout << m.count("a") << ' ' << m.size() << '\n';
return 0;
}Contar frequências rapidamente
Para grandes conjuntos de dados em que a ordem não importa, unordered_map conta frequências mais rapidamente que map.
#include <iostream>
#include <unordered_map>
#include <string>
int main() {
std::string items[] = {"a", "b", "a", "c", "b", "a"};
std::unordered_map<std::string, int> freq;
for (const auto& s : items) freq[s]++;
std::cout << "a appears " << freq["a"] << " times\n";
return 0;
}Usar at()
at() retorna uma referência e lança std::out_of_range quando a chave não é encontrada, sem nunca inseri-la.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"score", 42}};
std::cout << m.at("score") << '\n';
return 0;
}Inserção padrão por meio de []
Acessar uma chave ausente com [] a insere com um valor inicializado por valor (0 para inteiros). Tenha cuidado: isso aumenta o map silenciosamente.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m;
std::cout << m["new"] << '\n';
std::cout << "size: " << m.size() << '\n';
return 0;
}Esvaziar o map
clear() esvazia a tabela, e empty() informa se ela não contém elementos.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<int, int> m{{1, 1}, {2, 2}};
m.clear();
std::cout << std::boolalpha << m.empty() << '\n';
return 0;
}Verificação rápida
Teste sua compreensão sobre a ordenação de unordered_map.
Recapitulação
Você aprendeu que std::unordered_map:
- usa uma tabela de dispersão para obter operações O(1) em média
- não tem ordem garantida
- compartilha a mesma interface de
map(find,count,at,erase)
A seguir, você conhecerá unordered_set para armazenar elementos únicos rapidamente.
Perguntas Frequentes
A aula “std::unordered_map” é grátis?
Sim — o texto completo de “std::unordered_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::unordered_map”?
Busca rápida baseada em hash 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::unordered_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
- std::unordered_map
- unordered_set
- Funções de hash personalizadas
- Considerações de desempenho