Compreendendo o Unordered_Map::Find()
A função unordered_map::find() foi projetada para localizar um elemento que está associado a uma chave especificada dentro de um “unordered_map”. Sua declaração varia dependendo se o objeto é qualificado como constante ou não, proporcionando flexibilidade em seu uso.
iterador encontrar ( const Tipo de chave & k ) ;Isso é usado quando o “unordered_map” não é qualificado como constante. Este código retorna um iterador que aponta para o elemento encontrado.
const_iterator encontrar ( const Tipo de chave & k ) const ;
Esta versão é aplicável quando o “unordered_map” é qualificado como constante. Ele retorna um iterador constante com comportamento semelhante à versão não constante.
Parâmetros:
É necessário um único parâmetro, “k”, que é a chave a ser pesquisada dentro do “unordered_map”.
Valor de retorno:
O valor de retorno depende da qualificação do objeto “unordered_map”.
O método retorna um iterador não constante se o objeto não for constantemente qualificado.
Se o objeto for qualificado como constante, o método retornará um iterador constante.
Complexidade de tempo:
A complexidade de tempo de std::unordered_map::find() é crucial para compreender sua eficiência:
No caso médio, a complexidade do tempo é constante (O(1)), tornando-o altamente eficiente para casos de uso típicos.
Na pior das hipóteses, a complexidade do tempo torna-se linear (O(n)). No entanto, este cenário é raro na prática.
Exemplo 1:
Vamos explorar um exemplo prático para ilustrar o uso e os benefícios de unordered_map::find(). Neste exemplo, um “unordered_map” é criado com os caracteres como chaves e os números inteiros correspondentes como valores. A função find() localiza o elemento que está vinculado à chave “p”. O iterador “ittr” está vinculado ao elemento encontrado e seus dados são impressos no console. Veja o seguinte código:
#include#include
usando namespace std ;
interno principal ( vazio ) {
mapa_não ordenado < Caracteres , interno > descompactar = {
{ 'Em' , 9 } ,
{ 'a' , 6 } ,
{ 'p' , 8 } ,
{ 'eu' , 3 } ,
{ 'é' , 4 } } ;
auto ittr = desemp. encontrar ( 'p' ) ;
corte << 'Iterador' ' << ittr-> primeiro << ' 'aponta para =' << ittr -> segundo << fim ;
retornar 0 ; }
Vamos detalhar o código para entendê-lo melhor e de forma clara:
#include#include
Os arquivos de cabeçalho necessários estão incluídos:
O namespace “std” simplifica o código. Ele permite que você use os elementos da biblioteca C++ padrão sem prefixá-los com “std::”.
mapa_não ordenado < Caracteres , interno > descompactar = { { 'Em' , 9 } , { 'a' , 6 } , { 'p' , 8 } , { 'eu' , 3 } , { 'é' , 4 } } ;Um “unordered_map” chamado “um” é criado com os caracteres ('w', 'a', 'p', 'm', 's') como chaves e os números inteiros correspondentes (9, 6, 8, 3, 4 ) como valores.
auto ittr = desemp. encontrar ( 'p' ) ;A função find() é usada para procurar o elemento com a chave “p” no “unordered_map” que é “unomp”. O iterador “ittr” aponta para o elemento identificado.
corte << 'Iterador' ' << ittr-> primeiro << ' 'aponta para =' << ittr -> segundo << fim ;O conteúdo apontado pelo iterador é impresso no console. Imprime a chave (“p”) e o valor associado (8) neste caso.
retornar 0 ;O programa termina, retornando 0 para indicar uma execução bem-sucedida.
A saída do código é fornecida a seguir para sua referência:
Este código é um exemplo simples de utilização de unordered_map::find() para pesquisar e acessar com eficiência os elementos dentro de um “unordered_map”. O iterador fornece uma maneira conveniente de acessar a chave e o valor associado do elemento encontrado.
Exemplo 2:
Aqui está outro exemplo simples da função unordered_map::find(). Este código demonstra o uso de “unordered_map” para armazenar os valores booleanos associados a chaves inteiras e, em seguida, utiliza a função find() para verificar a existência de chaves específicas. Vamos ver o código a seguir e entender como ele funciona:
#incluirusando namespace std ;
interno principal ( ) {
mapa_não ordenado < interno , bool > descompactar ;
descompactar [ 2 ] = verdadeiro ;
descompactar [ 67 ] = falso ;
descompactar [ Quatro cinco ] = verdadeiro ;
descompactar [ 98 ] = falso ;
se ( desemp. encontrar ( 67 ) == desemp. fim ( ) )
corte << 'Elemento não encontrado' << fim ;
outro
corte << 'Elemento encontrado' << fim ;
se ( desemp. encontrar ( 42 ) == desemp. fim ( ) )
corte << 'Elemento não encontrado' << fim ;
outro
corte << 'Elemento encontrado' << fim ;
retornar 0 ;
}
Aqui está uma descrição detalhada do código:
#incluirEsta linha inclui um arquivo de cabeçalho que cobre as bibliotecas C++ mais padrão que são frequentemente usadas em programação competitiva. No entanto, em um desenvolvimento C++ regular, é recomendado incluir cabeçalhos específicos.
mapa_não ordenado < interno , bool > descompactar ;Um “unordered_map” chamado “unomp” é criado com chaves inteiras e valores booleanos.
descompactar [ 2 ] = verdadeiro ;descompactar [ 67 ] = falso ;
descompactar [ Quatro cinco ] = verdadeiro ;
descompactar [ 98 ] = falso ;
Os pares chave-valor são inseridos no “unordered_map”. Cada chave (inteiro) está associada a um valor booleano.
se ( desemp. encontrar ( 67 ) == desemp. fim ( ) )corte << 'Elemento não encontrado' << fim ;
outro
corte << 'Elemento encontrado' << fim ;
A função find() é empregada na condição if-else para procurar chaves específicas (67 e 42) dentro do “unordered_map”. Se a chave for encontrada, “Elemento encontrado” será impresso. Caso contrário, será impresso “Elemento não encontrado”. Veja a seguinte saída:
Este código mostra o uso básico de “unordered_map” e a função find() para determinar a presença ou ausência de chaves específicas no mapa.
Exemplo 3:
Vamos explorar outro exemplo que demonstra a descoberta de um valor fornecendo uma entrada em tempo de execução. Este programa simples utiliza um “mapa_não ordenado” para armazenar os nomes (como chaves) e valores numéricos associados (neste caso, representando alguns atributos). Em seguida, ele solicita que o usuário insira um nome, pesquise esse nome no mapa usando a função find() e imprima o valor associado se o nome for encontrado. O código é fornecido a seguir para sua referência:
#include#incluir
#include
usando namespace std ;
interno principal ( ) {
padrão :: mapa_não ordenado < padrão :: corda , dobro > descompactar = {
{ 'Herry' , 23 } ,
{ 'Outros' , 7.4 } ,
{ 'Kalsoom' , 1.2 } } ;
corda quem ;
corte << 'Quem é que voce esta procurando? ' ;
Obter linha ( comendo , Quem ) ;
mapa_não ordenado < corda , dobro >:: const_iterador encontrar = desemp. encontrar ( Quem ) ;
se ( encontrar == desemp. fim ( ) )
corte << 'não encontrado' ;
outro
corte << fim << encontrar -> primeiro << ' é ' << encontrar -> segundo << fim ;
retornar 0 ;
}
A seguir está o detalhamento do código para sua compreensão:
mapa_não ordenado < corda , dobro > descompactar = { } ;Um “unordered_map” chamado “unomp” é criado com chaves de string (nomes) e valores duplos.
corda quem ;O usuário é solicitado a inserir um nome na tela e a entrada é armazenada na variável de string “quem”.
mapa_não ordenado < corda , dobro >:: const_iterador encontrar = desemp. encontrar ( Quem ) ;A função find() é usada para pesquisar o nome inserido no “unordered_map”. O resultado é armazenado no iterador “fnd”.
se ( encontrar == desemp. fim ( ) )corte << 'não encontrado' ;
outro
corte << fim << encontrar -> primeiro << ' é ' << encontrar -> segundo << fim ;
Se o iterador “fnd” chegar ao final do “unordered_map” (end()), significa que o nome não foi encontrado e “not found” será impresso. Caso contrário, o nome e o valor associado serão impressos. Aqui está a saída do código:
Este código atua essencialmente como uma ferramenta simples de pesquisa de nome usando um “unordered_map”. Ele recebe a entrada do usuário, procura o nome no mapa e fornece o valor associado se o nome for encontrado.
Conclusão
A função unordered_map::find() em C++ fornece um mecanismo poderoso para localizar com eficiência os elementos dentro dos contêineres “unordered_map”. Sua complexidade de tempo médio constante o torna uma escolha preferida para operações de pesquisa em cenários onde os pares chave-valor devem ser acessados rapidamente. Os exemplos fornecidos mostram seu uso prático, enfatizando sua simplicidade e eficácia. Concluindo, dominar a função unordered_map::find() aprimora a capacidade de um programador C++ de aproveitar todo o potencial dos contêineres “unordered_map”, contribuindo para a criação de aplicativos otimizados e de alto desempenho.