La funzione di cancellazione deve eseguire un iteratore normale come argomento. Per ottenere un tale iteratore, si potrebbe provare a chiamare
minheap.erase(std::prev(minheap.end()));
Ciò richiede end() per ottenere un iteratore fino alla fine, poi esegue il backup un passo utilizzando la nuova funzione prev C++ 11. Se non si dispone di C++ 11 di supporto, in alternativa è possibile scrivere
minheap.erase(--minheap.end());
In alternativa, in quanto sembra che si sta cercando di utilizzare la multimap come un min-heap, avete considerato utilizzando invece priority_queue o gli algoritmi di heap come push_heap e pop_heap?
EDIT: Per rispondere alla domanda di follow-up, il motivo che stai ricevendo due diversi valori qui è che i punti logicamente, rbegin per l'ultimo elemento del multimap, non un passo prima di esso, mentre i punti finali uno dopo la fine. Il backup di un passo fa riferimento allo stesso elemento di rbegin, quindi se stai avanzando rbegin in avanti di un passo finirà per puntare all'elemento un passo prima dell'ultimo elemento.
Spero che questo aiuti!
Per quanto riguarda la modifica: non è necessario '++ it1',' rbegin' sta già puntando all'ultimo elemento. –
Oh, hai ragione, mi dispiace, mi sta facendo tardi: D – Cristy