Use a função std::map::find em C++

Jinku Hu 12 outubro 2023
  1. Use a função std::map::find para encontrar o elemento com um determinado valor-chave em C++
  2. Use a função de membro contains para verificar se o elemento dado existe em um mapa em C++
Use a função std::map::find em C++

Este artigo explica como utilizar a função std::map::find e algumas de suas alternativas em C++.

Use a função std::map::find para encontrar o elemento com um determinado valor-chave em C++

O objeto std::map é um dos contêineres associativos na biblioteca de modelos padrão C++ e implementa uma estrutura de dados classificada, armazenando valores-chave. Observe que as chaves são exclusivas no contêiner std::map. Assim, se novos elementos forem inseridos com as chaves existentes, a operação não tem efeito. Ainda assim, algumas funções-membro especiais na classe std::map podem atribuir novos valores aos pares existentes se as chaves forem correspondidas (por exemplo, função insert_or_assign).

As vantagens do contêiner std::map incluem operações rápidas de pesquisa, inserção e remoção, que podem ser realizadas em tempo logarítmico. A operação de pesquisa é fornecida pelo membro find, que aceita uma referência a uma chave. Se a chave fornecida for encontrada no objeto std::map, o iterador para o elemento correspondente é retornado. Por outro lado, suponha que a chave fornecida não seja encontrada no contêiner, o iterador passado-o-fim (map::end()) é retornado.

O fragmento de código a seguir demonstra um cenário de uso simples onde um contêiner map de pares string é inicializado com valores arbitrários e, em seguida, a chave com o valor "h" é pesquisada. Consequentemente, processamos o iterador retornado com a instrução if-else para imprimir o par de elementos ou enviar uma mensagem de que a chave fornecida não foi encontrada.

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  std::map<string, string> m1 = {
      {"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
      {"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
  };

  string key = "h";

  auto item = m1.find(key);
  if (item != m1.end()) {
    cout << "Key exists!  -  {" << item->first << ";" << item->second << "}\n";
  } else {
    cout << "Key does not exist!" << endl;
  }

  return EXIT_SUCCESS;
}

Resultado:

Key exists !-{
  h;
  htop
}

Use a função de membro contains para verificar se o elemento dado existe em um mapa em C++

Se o usuário precisar confirmar se o par com o valor fornecido existe no objeto map, pode-se utilizar a função de membro contains. A função faz parte do contêiner std::map desde a versão C++ 20, então você deve saber a versão do compilador para executar o seguinte trecho de código. A função contains faz referência à chave e retorna o valor bool true se for encontrado. A complexidade de tempo dessa função de membro também é logarítmica.

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  std::map<string, string> m1 = {
      {"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
      {"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
  };

  string key = "h";

  if (m1.contains(key)) {
    cout << "Key Exists!" << endl;
  } else {
    cout << "Key does not exist!" << endl;
  }

  return EXIT_SUCCESS;
}

Resultado:

Key Exists !

Alternativamente, pode-se usar a função de membro cout para verificar se o par de elementos com a chave dada existe no map. Geralmente, a função cout é utilizada para recuperar o número de elementos com a chave fornecida, mas como o std::map armazena apenas valores de chave únicos, o processo retorna 1 se o elemento for encontrado. Caso contrário, um valor zero é retornado para indicar que nenhum elemento foi encontrado.

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  std::map<string, string> m1 = {
      {"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
      {"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
  };

  string key = "h";

  if (m1.count(key)) {
    cout << "Key Exists!" << endl;
  } else {
    cout << "Key does not exist!" << endl;
  }

  return EXIT_SUCCESS;
}

Resultado:

Key Exists !
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C++ Map