GCC だと

typename map<Key, Value>::iterator it;

とする必要がある。
でも、コンパイラによっては typename を入れた方がエラーになる。

#if defined(__GNUC__)
#define TYPENAME typename
#else
#define TYPENAME
#endif

とかやっといて、

TYPENAME map<Key, Value>::iterator it;

とするが吉。