How about...
map<string, vector<string> >
Please note that map is pretty special in that unlike say vector the elements are never copied during map resizing, or when other elements are inserted or deleted. For this reason, there is no need to use pointers to protect against unnecessary deep copies.
From http://www.sgi.com/tech/stl/Map.html:
"Map has the important property that inserting a new element into a map does not invalidate iterators that point to existing elements. Erasing an element from a map also does not invalidate any iterators, except, of course, for iterators that actually point to the element that is being erased."
Of course, there may be a deep copy in copying a value into the map if you don't construct it in-place, and if you for some reason need to copy it out, but it's often easy to do everything in-place, perhaps with the helper ala:
vector<string>& this_one = my_map[my_key];
// work on this_one