Secondo cppreference, entrambi std::set
e std::map
emplace
le funzioni restituiscono a std::pair<iterator,bool>
, con un bool
valore per dire se l'inserimento ha effettivamente avuto luogo.
Però, emplace_hint
restituisce un iterator
sia per l'elemento inserito o per l'elemento esistente nel set o mappa se l'inserimento non è avvenuto. Non c'è bool
valore qui.
C'è qualche ragione per questa differenza nell'interfaccia di queste funzioni simili?
Aggiornare
Funzione insert
restituisce il bool
valore solo quando non viene fornito alcun suggerimento. Questo è coerente con il comportamento di emplace
e emplace_hint
. La domanda è quindi: c'è qualche ragione per non restituire a bool
quando viene dato un suggerimento?
Posso solo pensare che ci sia un qualche motivo per le prestazioni, perché l'utente di solito fornisce un suggerimento dopo a lower_bound
/upper_bound
operazione, quindi è sicuro che l'inserimento avverrà.