std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::find
De cppreference.com
< cpp | container | unordered map
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
Ejecuta este código
#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) |
(C++11) |
Devuelve un rango de elementos que coinciden con una clase específica. (función miembro pública) |