Infatti il metodo insert che accetta un parametro hint non restituisce se l'inserimento è riuscito o meno. Un modo per verificare se l'inserimento è effettivamente avvenuto sarebbe controllare la dimensione della mappa prima e dopo l'inserimento. Se è lo stesso, l'inserimento non è riuscito (ovvero la chiave era già presente). So che sembra brutto, ma è il modo più efficiente che potrei trovare. In effetti, credo che non vi sia alcuna ragione convincente per cui l'inserimento con un suggerimento non debba restituire una coppia (incluso il bool) proprio come fa il normale inserto senza suggerimento. Ma una volta che è stato specificato in uno standard precedente, è molto difficile modificarlo, poiché si tratta di un cambiamento radicale, cosa che la comunità C++ risente maggiormente.
Risposta originale (errata)
Vedi questo link
... restituisce una coppia, con il suo membro pair::first
impostato su un iteratore che punta all'elemento appena inserito o all'elemento che aveva già lo stesso valore nella mappa. Il pair::second
elemento nella coppia è impostato su true se è stato inserito un nuovo elemento o su false se esisteva un elemento con lo stesso valore.
Il link contiene anche un esempio
Ad esempio:
if(mp.insert(make_pair(key, value)).second == false)
{
cout << "Insertion failed. Key was present"
}
typedef std::map<std::string, int> map;
map m;
std::pair<map::iterator,bool> result = m.insert(std::make_pair("hi", 42));
result.second contiene quello che vuoi
Dipende da cosa intendi per fallito o riuscito.
std::map::insert
ha successo quando inserisce il nuovo elemento, altrimenti restituisce un iteratore a un elemento già esistente.
std::map::insert
fallisce se non c'è memoria sufficiente per inserire un nuovo elemento e genera std::bad_alloc
.