U
Urs Thuermann
I have a case where I must access a std::map using operator[] where
there is a high probability that the same index is used repetitively
for a number of times. Will I improve performance when I remember the
last index used and compare each time I access the map, or are map
implementations usually optimized for this case?
I am thinking of something like this (much simplified):
class Debug {
pthread_t last_tid;
struct LineBuffer *last_buf, *line_buf;
std::map<pthread_t, LineBuffer> map;
template <class T>
Debug &operator<<(const T &a) {
pthread_t tid = pthread_self();
if (tid == last_tid) {
line_buf = last_buf;
} else {
line_buf = &map[tid];
last_tid = tid;
}
// write 'a' to the line_buf,
// flush to cerr when complete.
;
return *this;
}
};
so multiple threads can write
Debug() << "foo value is " << foo << " yadda yadda" << std::endl;
without having their output mangled with other debug messages.
urs
there is a high probability that the same index is used repetitively
for a number of times. Will I improve performance when I remember the
last index used and compare each time I access the map, or are map
implementations usually optimized for this case?
I am thinking of something like this (much simplified):
class Debug {
pthread_t last_tid;
struct LineBuffer *last_buf, *line_buf;
std::map<pthread_t, LineBuffer> map;
template <class T>
Debug &operator<<(const T &a) {
pthread_t tid = pthread_self();
if (tid == last_tid) {
line_buf = last_buf;
} else {
line_buf = &map[tid];
last_tid = tid;
}
// write 'a' to the line_buf,
// flush to cerr when complete.
;
return *this;
}
};
so multiple threads can write
Debug() << "foo value is " << foo << " yadda yadda" << std::endl;
without having their output mangled with other debug messages.
urs