Requisito previo: mapas desordenados en STL
Unordered_map: unordered_map es un contenedor asociado que almacena elementos formados por la combinación de un valor clave y un valor asignado. El valor de la clave se utiliza para identificar de forma única el elemento y el valor asignado es el contenido asociado con la clave. Tanto la clave como el valor pueden ser de cualquier tipo predefinido o definido por el usuario.
unordered_map::at(): Esta función en C++ unordered_map devuelve la referencia al valor con el elemento como clave k.
Sintaxis:
unordered_map.at(k); Parameter: It is the key value of the element whose mapped value we want to access. Return type : A reference to the mapped value of the element with a key value equivalent
Nota: el método genera un error en tiempo de ejecución si la clave no está presente.
CPP
// C++ program to illustrate // std :: unordered_map :: at() #include<iostream> #include<string> #include<unordered_map> using namespace std; int main() { unordered_map<string,int> mp = { {"first",1}, {"second",2}, {"third",3}, {"fourth",4} }; // returns the reference i.e. the mapped // value with the key 'second' cout<<"Value of key mp['second'] = " <<mp.at("second")<<endl; try { mp.at(); } catch(const out_of_range &e) { cerr << "Exception at " << e.what() << endl; } return 0; }
Producción:
Value of key mp['second'] = 2 Exception at _Map_base::at
Aplicación práctica: std::unordered_map::la función at() se puede usar para acceder al valor asignado y, por lo tanto, se puede editar, actualizar, etc.
CPP
// CPP program to illustrate // application of this function // Program to correct the marks // given in different subjects #include<iostream> #include<string> #include<unordered_map> using namespace std; // driver code int main() { // marks in different subjects unordered_map<string,int> my_marks = { {"Maths", 90}, {"Physics", 87}, {"Chemistry", 98}, {"Computer Application", 94} }; my_marks.at("Physics") = 97; my_marks.at("Maths") += 10; my_marks.at("Computer Application") += 6; for (auto& i: my_marks) { cout<<i.first<<": "<<i.second<<endl; } return 0; }
Producción:
Computer Application: 100 Chemistry: 98 Physics: 97 Maths: 100
Cómo unordered_map at() es diferente de unordered_map operator()
- Tanto at() como operator[] se usan para referirse al elemento presente en la posición dada , la única diferencia es que at() lanza una excepción fuera de rango mientras que operator[] muestra un comportamiento indefinido, es decir, si operator[] se usa para encuentre el valor correspondiente a la clave y si la clave no está presente en el mapa desordenado, primero insertará la clave en el mapa y luego asignará el valor predeterminado ‘0’ correspondiente a esa clave. .