mapを回す

「p」を参照にもポインタにもできない…なぜー?

#include <iostream>
#include <string>
#include <map>
#include <algorithm>

using namespace std;

void handle(pair<string, string> p) {
  cout << p.first << ":" << p.second << endl;
}

int main() {
  map<string, string> m;
  m.insert(make_pair("foo", "FOO"));
  m.insert(make_pair("bar", "BAR"));
  m.insert(make_pair("zoo", "ZOO"));

  for_each(m.begin(), m.end(), handle);

  return 0;
}

追記
↓はOKだった。なんでだろう…

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

void handle(string &s) {
  cout << s << endl;
}

int main() {
  vector<string> v;
  v.push_back("foo");
  v.push_back("bar");
  v.push_back("zoo");

  for_each(v.begin(), v.end(), handle);

  return 0;
}