Имея
std::multimap<short,std::multimap<short,short>> multimap
...
std::multimap<short,short> &a=multimap.find(0)->second;
std::pair<short,short> z={1,2};
a.insert(z);
Если find
возвращает multimap::end
, то один не должен быть разыменован, но вы делаете и получаете ссылку на second
, поведение не определено, когда позже использовать эту ссылку на insert
.
Так что, конечно, проверьте, если find
успешно, например
std::multimap<short,std::multimap<short,short>> multimap;
std::multimap<short,std::multimap<short,short>>::iterator it = multimap.find(0);
if (it == multimap.end()) {
...
}
else {
std::multimap<short,short> &a = it->second;
std::pair<short,short> z={1,2};
a.insert(z);
}
Из этого вашего названия "компилятор не завершает sh процесс" не очень понятно, выполнение не то, что вы ожидаете, но компилятор не запускает процесс