Funkcja usuwania musi przyjmować zwykły iterator jako argument. Aby uzyskać taki iterator, można spróbować nazywając
minheap.erase(std::prev(minheap.end()));
Wymaga to end(), aby uzyskać iterator do końca, po czym wycofuje ją o jeden krok za pomocą nowej funkcji C++ 11 poprz. Jeśli nie masz C++ 11 wsparcie, można alternatywnie napisać
minheap.erase(--minheap.end());
Alternatywnie, ponieważ wydaje się, że starasz się używać multimap jako min sterty, czy za lub zamiast korzystania priority_queue algorytmy sterty, takie jak push_heap i pop_heap?
EDIT: Aby odpowiedzieć na kolejne pytanie, dlatego, że dostajesz dwie różne wartości jest to, że logicznie, rbegin wskazuje na ostatni element multimapy, a nie jeden krok przed nim, a punktami końcowymi jeden za końcem. Tworzenie kopii zapasowej o jeden krok oznacza, że odnosi się do tego samego elementu, co rbegin, więc jeśli przesuniesz rbegin o jeden krok w przód, kończy się wskazaniem elementu o jeden krok przed ostatnim elementem.
Mam nadzieję, że to pomoże!
Odnośnie twojej edycji: nie potrzebujesz '++ it1',' rbegin' wskazuje już na ostatni element. –
Och, masz rację, przepraszam, robi się za późno dla mnie: D – Cristy