mardi 23 octobre 2018

C++ map::find & map::at performance difference

I was grading some exercises and at a specific program although the algorithm seemed correct it would be too slow (and I mean too slow). The program was accessing a map using map::at (introduced in C++11). With a minimum change of replacing at with find (and fixing the syntax) the same program would be really fast (compared to the original version).

Looking at cplusplus.com both methods claim to have the same complexity and I couldn't see why one would be different from the other (other than API reason, not throwing an exception, etc).

Then I saw that the description in the section about data races is different. But I don't fully understand the implications. Is my assumption that map::at is thread safe (whereas map::find is not) and thus incurring some runtime penalties correct?

http://www.cplusplus.com/reference/map/map/at/

http://www.cplusplus.com/reference/map/map/find/

Aucun commentaire:

Enregistrer un commentaire