template double testMap(unsigned int itemCount, unsigned int lookupCount, T (*getKey)()) { Stopwatch sw; printf("Testing %s...\n", typeid(T).name()); printf("Generating %d keys...", itemCount); sw.start(); std::vector keys(itemCount); for (unsigned int i = 0; i < itemCount; ++i) { keys.push_back(getKey()); } sw.stop(); printf("done; took %gms\n", sw.getElapsed()); printf("Putting them into a map...", itemCount); sw.reset(); sw.start(); std::map m; for (std::vector::const_iterator it = keys.begin(); it != keys.end(); ++it) { m.insert(std::make_pair(*it, 0)); } sw.stop(); printf("done; took %gms\n", sw.getElapsed()); printf("Looking up %d items...", lookupCount); sw.reset(); sw.start(); for (unsigned int i = 0; i < lookupCount; ++i) { const T& key = keys[i % keys.size()]; m.find(key); } sw.stop(); double time = sw.getElapsed() / lookupCount * 1000000; printf("done; took %gns each\n\n", time); return time; }