La función de borrado debe tomar un iterador regular como argumento. Para obtener un iterador tal, usted podría intentar llamar
minheap.erase(std::prev(minheap.end()));
Esto exige final() para obtener un iterador hasta el final, y luego lo respalda un paso utilizando la nueva función prev C++ 11. Si usted no tiene soporte para C++ 11, se puede escribir alternativamente
minheap.erase(--minheap.end());
alternativa, ya que parece que está tratando de utilizar el multimap como un min-montón, ¿ha considerado en lugar de utilizar o priority_queue los algoritmos de montón como push_heap y pop_heap?
EDITAR: Para responder a su pregunta de seguimiento, la razón por la que usted está recibiendo dos valores diferentes aquí es que los puntos lógicamente, rbegin hasta el último elemento de la multimap, ni un paso antes de que, mientras que los puntos finales uno pasado el final. Hacer una copia de seguridad en un paso hace que se refiera al mismo elemento que reiniciar, por lo que si avanza un paso hacia adelante, terminará apuntando al elemento un paso antes del último elemento.
Espero que esto ayude!
En cuanto a su edición: no necesita '++ it1',' rbegin' ya está apuntando al último elemento. –
Oh, tienes razón, lo siento, se está haciendo tarde para mí: D – Cristy