// CS 509 - Advanced Programming II
// Spring '04
//
// Experimenting with vector vs. map performance.
#include <map>
#include <iostream>
#include <vector>
#include "cl-options.h"
#include "episode-timer.h"
typedef std::map<int, int> iimap;
typedef std::vector<int> ivec;
static void
interleaved(const ivec & vals, episode_timer & mtime, episode_timer & vtime) {
assert(not (vals.size() & 1));
mtime.start();
iimap m;
for (unsigned i = 0; i < vals.size(); i += 2) {
m.insert(std::make_pair(vals[i], vals[i]));
m.find(vals[i + 1]);
}
mtime.stop();
vtime.start();
ivec v;
v.reserve(vals.size());
for (unsigned i = 0; i < vals.size(); i += 2) {
v.insert(std::lower_bound(v.begin(), v.end(), vals[i]), vals[i]);
std::binary_search(v.begin(), v.end(), vals[i + 1]);
}
vtime.stop();
}
static void
staged(const ivec & vals, episode_timer & mtime, episode_timer & vtime) {
assert(not (vals.size() & 1));
mtime.start();
iimap m;
for (unsigned i = 0; i < vals.size(); i += 2)
m.insert(std::make_pair(vals[i], vals[i]));
for (unsigned i = 1; i < vals.size(); i += 2)
m.find(vals[i]);
mtime.stop();
vtime.start();
ivec v;
v.reserve(vals.size());
for (unsigned i = 0; i < vals.size(); i += 2)
v.push_back(vals[i]);
std::sort(v.begin(), v.end());
for (unsigned i = 1; i < vals.size(); i += 2)
std::binary_search(v.begin(), v.end(), vals[i]);
vtime.stop();
}
static void time(
void (* test)(const ivec &, episode_timer &, episode_timer &),
unsigned iters, unsigned size) {
episode_timer mtime, vtime;
ivec vals;
vals.reserve(size*2);
for (unsigned i = 0; i < size; i++) {
vals.push_back(random());
vals.push_back(random());
}
for (unsigned j = 0; j < iters; j++) {
random_shuffle(vals.begin(), vals.end());
test(vals, mtime, vtime);
}
std::cout << "size " << size << " iters " << iters
<< " map time " << mtime.average() << " (" << mtime.stddev()
<< ") vector time " << vtime.average()
<< " (" << vtime.stddev() << ")\n";
}
int main(int argc, char * argv[] ) {
cl_options opts;
opts['i'] = "10";
opts['s'] = "1000";
get_cl_options(argc, argv, opts);
time(interleaved, atoi(opts['i']), atoi(opts['s']));
}
/*
xlabel total insert + find operations
ylabel time (msec)
curvelabel map
curvelabel vector
curvecolor 1 0 0
curvecolor 0 0 1
legendposition 0.1 0.70
data size %x iters 10 map time %y1 vector time %y2
g++ -o t -O -ansi -pedantic -I $HOME/lib/c vvm.cc $HOME/lib/c/cl-options.cc
*/
// $Log: vvm.cc,v $
// Revision 1.1 2004/03/09 23:39:38 rclayton
// Initial revision
//
syntax highlighted by Code2HTML, v. 0.9