unordered_map at () в C ++
Предпосылка: неупорядоченные карты в STL
Unordered_map: unordered_map - это связанный контейнер, в котором хранятся элементы, сформированные комбинацией значения ключа и сопоставленного значения. Значение ключа используется для уникальной идентификации элемента, а отображаемое значение - это содержимое, связанное с ключом. И ключ, и значение могут быть любого предопределенного или определяемого пользователем типа.
unordered_map :: at (): эта функция в C ++ unordered_map возвращает ссылку на значение с элементом в качестве ключа k.
Синтаксис:
unordered_map.at (k); Параметр: Это ключевое значение элемента, сопоставленное значение которого мы хотим получить. Тип возврата: Ссылка на сопоставленное значение элемента с эквивалентом значения ключа
Примечание: метод выдает ошибку времени выполнения, если ключ отсутствует.
// 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 ie 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; } |
Выход:
Value of key mp["second"] = 2 Exception at _Map_base::at
Практическое применение: функция std :: unordered_map :: at () может использоваться для доступа к отображаемому значению и, таким образом, может редактировать, обновлять и т. Д.
// CPP program to illistrate // 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; } |
Выход:
Компьютерное приложение: 100 Химия: 98 Физика: 97 Математика: 100
Чем unordered_map at () отличается от оператора unordered_map ()
- Как at (), так и operator [] используются для ссылки на элемент, присутствующий в данной позиции , единственная разница в том, что at () выдает исключение вне допустимого диапазона, тогда как operator [] показывает неопределенное поведение, т.е. если operator [] используется для найдите значение, соответствующее ключу, и если ключ отсутствует в неупорядоченной карте, он сначала вставит ключ в карту, а затем присвоит значение по умолчанию «0», соответствующее этому ключу. .