Use a função std::map::find em C++
-
Use a função
std::map::find
para encontrar o elemento com um determinado valor-chave em C++ -
Use a função de membro
contains
para verificar se o elemento dado existe em um mapa 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 !
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