C++ 09 Jul 2009 23:43:35

C++ Map Speeds, GNU g++ Edition

(There is also an MSVC++ Edition of these performance tests, and a newer std::set comparison.)

While testing whether anything would break by switching to std::tr1::unordered_map for CG-3, I noticed it ran a consistent 15% faster. So, for my own curiousity, I threw together this little speed test: timemap.cpp with cycle.h.

Should be compiled with GCC g++ of at least version 4.3 to have TR1, and with -O2 or higher; -O will not optimize the hash maps sufficiently.

Now, that is obviously a naive test. Maps of integer to integer is a trivial case, but it is also a case I use often in CG-3 so I figured it would suit fine for a test. Results are as follows, with std::map set as reference 100% and lower is better.

<int,int>InsertLookupIterateErase
std::map100.00%100.00%100.00%100.00%
__gnu_cxx::hash_map26.86%5.40%62.71%16.87%
std::tr1::unordered_map36.68%4.92%37.70%15.93%
boost::unordered_map28.55%5.27%36.03%15.40%
 

And the corresponding test for std::string as key, again std::map set to 100% and lower is better:

<std::string,int>InsertLookupIterateErase
std::map100.00%100.00%100.00%100.00%
__gnu_cxx::hash_map31.77%45.88%65.19%34.35%
std::tr1::unordered_map48.85%31.55%165.41%24.94%
boost::unordered_map33.36%17.96%64.94%13.91%
 

StumbleUponFacebookDiggDeliciousRedditMySpaceShare

Subscribe to the comments through RSS Feed

Leave a Reply

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word