关于c++bind的一个语法错误问题

#include
#include
#include
#include
#include
#include
using namespace std;

void outPut(const string&outString)
{
cout << outString << endl;
}
int main()
{
using namespace std::placeholders;
mapmap1;
for_each(map1.begin(), map1.end(), bind(outPut, bind(map::value_type::second, _1)));
system("pause");
return 0;
}
我的问题是:为什么不可以这么做

bind是指定可调用实体的某些参数绑定到已有的变量,绑定的应该都是函数。
bind(map::value_type::second, _1)这个是想把map的value和调用outPut的传入参数绑定在一起啊吗?
map::value_type::second 应该是没有这个写法的,就算有,那这也仅仅是map中value的类型,一个类型如何跟一个参数绑定呢?
我是这样看的,有什么问题请指正

for_each(map1.begin(), map1.end(), [](pair<key, value> pair)
{
    output(pair.second);
});
    这样应该就行了吧