0Pricing
C++ Academy · Aula

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

  1. std::unordered_map
  2. unordered_set
  3. Funções de hash personalizadas
  4. Considerações de desempenho
← Voltar para C++ Academy