c++ 地图和地图之间的差别

c++ map<string,int>和map<int,string>之间的差别?
有如下代码:

#include <iostream>
#include<map>
using std::map;
using namespace  std;

int _tmain(int argc, _TCHAR* argv[])
{
//[1]
  map<int,string> maplive;
  maplive[1] = "";

//[2]
map<string,int> maplive1;
maplive1["1"] = 10;

return 0;
}

第二个报错:
1>c:\program files\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: “bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)”: 未能从“const std::string”为“const std::_Tree<_Traits> &”推导 模板 参数
我知道这肯定是类型推导的问题,但是为什么第一个不抱错 呢,想不通?

代码头部加上
#include<string>就是正确的
------解决思路----------------------
作为Key的才需要用到具体函数吧
Value只是纯粹的储存而已
------解决思路----------------------
stl map的实现是红黑数 查找默认使用小于号需要重载小于号 operator<不在xstring定义
------解决思路----------------------
当key不能比较大小写,要自己重写key比较大小的方式。