1) Я не уверен, но, вероятно, существует UB, и это может вызвать ошибку сегментации (например, когда вы используете clang):
std::prev(container.begin())
Для G CC std :: prev ( container.begin () и container.begin () возвращают одно и то же значение.
2) Почему вы не использовали reverse_iterator?
for (auto it = mymultiset.rbegin(); it != mymultiset.rend(); ++it)
std::cout << "PPP" << *it;
или
for (auto it: boost::adaptors::reverse(mymultiset))
std::cout << "PPP" << it;