std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::find
De cppreference.com
<tbody>
</tbody>
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.Parámetros
| key | - | Valor de la clave del elemento a buscar. |
| x | - | Un valor de cualquier tipo que pueda compararse transparentemente con una clave. |
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()).
Complejidad
Constante en promedio, en el peor de los casos lineal en el tamaño del contenedor.
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
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) |