Что возвращает unordered_map при поиске несуществующего ключа - PullRequest
0 голосов
/ 21 июня 2020

У меня есть unordered_map<char, mystruct> h.

Что это возвращает, если h не содержит ключа x?

mystruct ms = h['x'];

Ответы [ 3 ]

2 голосов
/ 21 июня 2020

Если указанный ключ 'x' не существует, std::unordered_map::operator[] сначала вставит инициализированное значением mystruct, а затем вернет ссылку на вставленный mystruct. После этого ms инициализируется копией из вставленного mystruct.

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

Когда используется распределитель по умолчанию, это приводит к ... отображаемому значению инициализация значения .

Возвращаемое значение Ссылка на сопоставленное значение нового элемента, если не существует элемента с ключевым ключом.

1 голос
/ 21 июня 2020

неупорядоченная карта попытается по умолчанию инициализировать mystruct с помощью ключа 'x' и назначить его моей структуре.

если вы хотите избежать этого, используйте .at (ключ), если он не существует, он будет выбросить исключение out_of_range, которое вы можете поймать и обработать.

0 голосов
/ 21 июня 2020

если вы напрямую используете h ['любой ключ, которого нет'], он даст ему случайное значение. то, что вы можете сделать, - это всякий раз, когда вы не уверены, есть он там или нет, просто используйте его внутри if. если он присутствует, он вернет истину, а если нет, то ложь. пример: if (h ['a']) cout <

...