Sono abbastanza sicuro che non c'è modo conforme agli standard di farlo - Wikipedia says so too:
non c'è il supporto standard per la riduzione/aumento-chiave operativa
Anche se lo fa andare per puntare alla libreria gheap
, che potrebbe valere la pena dare un'occhiata.
Il problema qui è che lo standard non richiede quale forma assume la struttura dell'heap, né come esattamente vengono eseguite le operazioni. (In generale, questa è una buona cosa.)
Se l'implementazione utilizza un heap binario standard, penso che si possa semplicemente diminuire l'elemento a heap[i]
e quindi chiamare push_heap(heap.begin(), heap.begin() + i + 1)
, che eseguirà l'operazione up-heap necessaria. L'elemento che termina alla posizione i
non deve essere più grande del valore lì originariamente, e quindi la proprietà heap dell'intero heap viene preservata. Ma questo non è supportato dallo standard anche se a volte funziona a volte in alcune implementazioni.
fonte
2012-03-28 20:21:58
qualsiasi elemento sfortunatamente – Jake