Espacios de nombres
Variantes
Acciones

std::multimap<Key,T,Compare,Allocator>::find

De cppreference.com
< cpp‎ | container‎ | multimap
 
 
 
 
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

#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) [editar]
Devuelve un rango de elementos que coinciden con una clase específica.
(función miembro pública) [editar]