Domanda Perché impostare / mappare emplace_hint non restituisce un valore booleano


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à.


12
2017-10-06 12:27


origine


risposte:


emplace_hint lo fa probabilmente per coerenza con l'accenno insert: emplace era inizialmente proposto come una coppia di sovraccarichi, mirroring insert, ma il sovraccarico accennato è stato rinominato dopo LWG 763, anche se Josuttis voleva rinominare la versione non accennata anziché)

L'accennato insert per i contenitori associativi accetta un iteratore e un valore e restituisce un iteratore per essere compatibile con il normale insert su contenitori sequenziali in codice generico. come menzionato nel libro di Josuttis. Questa compatibilità è sfruttata da std :: Inseritore


5
2017-10-06 16:57