Espacios de nombres
Variantes
Acciones

std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::find

De cppreference.com
 
 
 
 
iterator find( const Key& key );
(1)
const_iterator find( const Key& key ) const;
(2)
template< class K > iterator find( const K& x );
(3) (desde C++20)
template< class K > const_iterator find( const K& x ) const;
(4) (desde C++20)
1,2) Encuentra un elemento con clave equivalente a key.
3,4) Encuentra un elemento con clave que se compara equivalente al valor x. Esta sobrecarga solo participa en la resolución de sobrecargas si Hash::is_transparent y KeyEqual::is_transparent son válidos y cada uno denota un tipo. Esto supone que tal Hash es invocable con el tipo K y Key, y que el KeyEqual es transparente, lo que, en conjunto, permite llamar a esta función sin construir un ejemplar de Key.

Contenido

[editar] Parámetros

key - Valor de la clave del elemento a buscar.
x - Un valor de cualquier tipo que pueda compararse transparentemente con una clave.

[editar] Valor de retorno

Iterador a un elemento con una clave equivalente a key. Si tal elemento no se encuentra, se devuelve el iterador después del final (véase end()).

[editar] Complejidad

Constante en promedio, en el peor de los casos lineal en el tamaño del contenedor.

[editar] Ejemplo

#include <cstddef>
#include <iostream>
#include <functional>
#include <string>
#include <string_view>
#include <unordered_map>
 
using namespace std::literals;
using std::size_t;
 
struct dispersion_para_cadena
{
    using tipo_dispersion = std::hash<std::string_view>;
    using is_transparent = void;
 
    size_t operator()(const char* str) const        { return tipo_dispersion{}(str); }
    size_t operator()(std::string_view str) const   { return tipo_dispersion{}(str); }
    size_t operator()(std::string const& str) const { return tipo_dispersion{}(str); }
};
 
int main()
{
    // demo de comparación simple
    std::unordered_map<int,char> ejemplo = {{1,'a'},{2,'b'}};
 
    auto busqueda = ejemplo.find(2);
    if (busqueda != ejemplo.end()) {
        std::cout << "Se encontró " << busqueda->first << " " << busqueda->second << '\n';
    } else {
        std::cout << "No se encontró\n";
    }
 
    // C++20 demo: Búsqueda heterogénea para contenedores no ordenados (dispersión transparente)
    std::unordered_map<std::string, size_t, dispersion_para_cadena, std::equal_to<>> map{ {"uno"s, 1} };
    std::cout << std::boolalpha
        << (map.find("uno")   != map.end()) << '\n'
        << (map.find("uno"s)  != map.end()) << '\n'
        << (map.find("uno"sv) != map.end()) << '\n';
}

Salida:

Se encontró 2 b
true
true
true

[editar] Véase también

(C++11)
Devuelve el número de elementos que coinciden con una clave específica.
(función miembro pública) [editar]
Devuelve un rango de elementos que coinciden con una clase específica.
(función miembro pública) [editar]