Nyatanya metode penyisipan yang mengambil parameter petunjuk tidak mengembalikan apakah penyisipan berhasil atau tidak. Salah satu cara untuk memeriksa apakah penyisipan benar-benar terjadi adalah dengan memeriksa ukuran peta sebelum dan sesudah penyisipan. Jika sama, maka penyisipan gagal (yaitu kuncinya sudah ada). Saya tahu kedengarannya jelek, tapi itulah cara paling efisien yang bisa saya lakukan. Sebenarnya saya percaya bahwa tidak ada alasan kuat bahwa sisipan dengan petunjuk tidak boleh mengembalikan pasangan (termasuk bool) seperti halnya sisipan non-petunjuk biasa. Namun setelah ditentukan dalam standar yang lebih lama, sangat sulit untuk mengubahnya, karena ini merupakan perubahan yang merusak, yang sebagian besar dibenci oleh komunitas C++.
Jawaban asli (salah)
Lihat tautan ini
... mengembalikan pasangan, dengan anggotanya pair::first
setel ke iterator yang menunjuk ke elemen yang baru disisipkan atau ke elemen yang sudah memiliki nilai yang sama di peta. pair::second
elemen dalam pasangan disetel ke benar jika elemen baru dimasukkan atau salah jika ada elemen dengan nilai yang sama.
Tautan tersebut juga berisi contoh
Misalnya:
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 berisi apa yang Anda inginkan
Tergantung apa yang Anda maksud dengan gagal atau berhasil.
std::map::insert
berhasil saat menyisipkan elemen baru, jika tidak, ia mengembalikan iterator ke elemen yang sudah ada.
std::map::insert
gagal jika tidak ada cukup memori untuk memasukkan elemen baru dan melempar std::bad_alloc
.