Namespaces
Variants

std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>:: at

From cppreference.net

T & at ( const Key & key ) ;
(1) (desde C++23)
const T & at ( const Key & key ) const ;
(2) (desde C++23)
template < class K >
T & at ( const K & x ) ;
(3) (desde C++23)
template < class K >
const T & at ( const K & x ) const ;
(4) (desde C++23)

Devuelve una referencia al valor mapeado del elemento con la clave especificada. Si no existe tal elemento, se lanza una excepción de tipo std::out_of_range .

1,2) La clave es equivalente a key .
3,4) La clave se compara como equivalente al valor x . La referencia al valor mapeado se obtiene como si mediante la expresión this - > find ( x ) - > second .
La expresión this - > find ( x ) debe estar bien formada y tener un comportamiento bien definido; de lo contrario, el comportamiento es indefinido.
Estas sobrecargas participan en la resolución de sobrecarga solo si Compare es transparente . Permite llamar a esta función sin construir una instancia de Key .

Contenidos

Parámetros

key - la clave del elemento a buscar
x - un valor de cualquier tipo que puede compararse transparentemente con una clave

Valor de retorno

Una referencia al valor mapeado del elemento solicitado.

Excepciones

1,2) std::out_of_range si el contenedor no tiene un elemento con la key especificada.
3,4) std::out_of_range si el contenedor no tiene el elemento especificado, es decir, si find ( x ) == end ( ) es true .

Complejidad

Logarítmico en el tamaño del contenedor.

Ejemplo

#include <cassert>
#include <iostream>
#include <flat_map>
struct LightKey { int o; };
struct HeavyKey { int o[1000]; };
// El contenedor debe usar std::less<> (u otro Comparator transparente) para
// acceder a las sobrecargas (3,4). Esto incluye sobrecargas estándar, como
// la comparación entre std::string y std::string_view.
bool operator<(const HeavyKey& x, const LightKey& y) { return x.o[0] < y.o; }
bool operator<(const LightKey& x, const HeavyKey& y) { return x.o < y.o[0]; }
bool operator<(const HeavyKey& x, const HeavyKey& y) { return x.o[0] < y.o[0]; }
int main()
{
    std::flat_map<int, char> map{{1, 'a'}, {2, 'b'}};
    assert(map.at(1) == 'a');
    assert(map.at(2) == 'b');
    try
    {
        map.at(13);
    }
    catch(const std::out_of_range& ex)
    {
        std::cout << "1) out_of_range::what(): " << ex.what() << '\n';
    }
#ifdef __cpp_lib_associative_heterogeneous_insertion
    // Demostración de comparación transparente.
    std::flat_map<HeavyKey, char, std::less<>> map2{{{1}, 'a'}, {{2}, 'b'}};
    assert(map2.at(LightKey{1}) == 'a');
    assert(map2.at(LightKey{2}) == 'b');
    try
    {
        map2.at(LightKey{13});
    }
    catch(const std::out_of_range& ex)
    {
        std::cout << "2) out_of_range::what(): " << ex.what() << '\n';
    }
#endif
}

Salida posible:

1) out_of_range::what(): map::at:  key not found
2) out_of_range::what(): map::at:  key not found

Véase también

acceder o insertar elemento especificado
(función miembro pública)
encuentra elemento con clave específica
(función miembro pública)