Есть ли разница между следующими командами из std :: unordered_map - PullRequest
0 голосов
/ 12 ноября 2018

Для вставки пары ключ-значение в неупорядоченную карту, например, std::unordered_pair<int,int> map1, мы можем сделать это любым из этих двух способов:

map1[2]=5;
map1.insert({2,5});

Есть ли разница между использованием std_unordered_insertили operator[]?

И если я хочу найти сопоставленное значение для данного ключа, могу ли я использовать одно из следующего:

mappedVal = map1.at(2);
mappedVal = map1[2];

Опять же, любая разница между использованием std::unordered_map::at или operator[]?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

map1 [2] = 5;

Если существует запись с ключом 2, установите значение этой записи на 5. В противном случае создайте новую запись с ключом 2 и значением 5.


map1.insert ({2,5});

Если записи с ключом 2 не существует, создайте новую запись с ключом 2 и значением 5. В противном случае ничего не делать .


mappedVal = map1.at (2);

Если существует запись с ключом 2, присвойте ее значение mappedVal. В противном случае выдается исключение out_of_range.


mappedVal = map1 [2];

Если существует запись с ключом 2, присвойте ее значение mappedVal. В противном случае создайте запись для 2, используя значение по умолчанию, и назначьте это значение по умолчанию для mappedVal.


Для поиска я обычно использую unordered_map::find() вместо at() или operator [] () (если только я не знаю, что для данного ключа есть запись).

0 голосов
/ 12 ноября 2018

В отличие от operator[], at() сгенерирует исключение std::out_of_range, если ключ не существует. operator[] вместо этого создаст ключ.

...