std::multimap<Key,T,Compare,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++14) |
template< class K > const_iterator find( const K& x ) const; |
(4) | (desde C++14) |
1,2) Encuentra un elemento con clave equivalente a
key
. Si hay varios elementos con key
en el contenedor, se puede devolver cualquiera de ellos. 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 el id-calificado Compare::is_transparent es válido y denota un tipo. Permite llamar a esta función sin construir una instancia 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
Logarítmica en el tamaño del contenedor.
[editar] Ejemplo
Ejecuta este código
#include <iostream> #include <map> struct ClavePesada { int x; int data[1000]; }; struct ClaveLigera { int x; }; // Nota: como se detalla arriba, el contenedor debe usar std::less<> // (u otro comparador transparente) para acceder a estas sobrecargas. // Esto incluye las sobrecargas estándar, como entre std::string y std::string_view. bool operator<(const ClavePesada& fk, const ClaveLigera& lk) { return fk.x < lk.x; } bool operator<(const ClaveLigera& lk, const ClavePesada& fk) { return lk.x < fk.x; } bool operator<(const ClavePesada& fk1, const ClavePesada& fk2) { return fk1.x < fk2.x; } int main() { // demo de comparación simple std::multimap<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"; } // demo de comparación transparente std::multimap<ClavePesada, char, std::less<>> ejemplo2 = { { {1, {} },'a'}, { {2, {} },'b'} }; ClaveLigera lk = {2}; auto busqueda2 = ejemplo2.find(lk); if (busqueda2 != ejemplo2.end()) { std::cout << "Se encontró " << busqueda2->first.x << " " << busqueda2->second << '\n'; } else { std::cout << "No se encontró\n"; } // Obtención de iteradores constantes. // El compilador decide si devuelve un iterador de tipo (no) const al acceder a // map; para prevenir modificación intencional, una opción fácil es acceder a map // mediante referencia const. const auto& refejemplo2 = ejemplo2; auto busqueda3 = refejemplo2.find(lk); if (busqueda3 != ejemplo2.end()) { std::cout << "Se encontró " << busqueda3->first.x << ' ' << busqueda3->second << '\n'; // busqueda3->second = 'c'; // ERROR: asignación de miembro // 'std::pair<const ClavePesada, char>::second' // en objeto de solo lectura } }
Salida:
Se encontró 2 b Se encontró 2 b Se encontró 2 b
[editar] Véase también
Devuelve el número de elementos que coinciden con una clave específica. (función miembro pública) | |
Devuelve un rango de elementos que coinciden con una clase específica. (función miembro pública) |