I actually prefer the first one, since it's the closest that C++03 will allow to what I want. In C++0x, you will be able to say
vector<pair<int, string>> blah;
And the parser will recognize >> as the end of two template calls, and not the stream operator.
This really sucks for angle brackets though. Compare
vector<pair<int, string> > blah;
to
vector< pair< int, string > > blah;