map <string,string>如何在此地图中插入数据?

bjs*_*123 12 c++ stl stdmap stdstring

我需要以键值格式存储字符串.所以我正在使用如下的地图.

#include<map>
using namespace std;
int main()
{
    map<string, string> m;
    string s1 = "1";
    string v1 = "A";

    m.insert(pair<string, string>(s1, v1)); //Error
}
Run Code Online (Sandbox Code Playgroud)

我在插入行时遇到错误

错误C2784:'bool std :: operator <(const std :: _ Tree <_Traits>&,const std :: _ Tree <_Traits>&)':无法推断'const std :: _ Tree <_Traits>&'的模板参数来自'const std :: string'

我也尝试过make_pair函数,但是这也报告了同样的错误.

m.insert(make_pair(s1, v1));
Run Code Online (Sandbox Code Playgroud)

请告诉我什么是错的,以及解决上述问题的方法是什么.解决了上述问题后,我可以使用下面的方法来检索基于密钥的值

m.find(s1);
Run Code Online (Sandbox Code Playgroud)

Eti*_*tel 36

我想你错过了#include <string>某个地方.

  • @ereOn - 或许这不是唯一的编译器错误 (3认同)
  • 我已经在最新的VS 2012版本上进行了测试,它也做了同样的事情.这是非常令人困惑和奇怪的,它不抱怨字符串没有被定义. (2认同)

Dar*_*mas 7

你能试一试吗:

#include<string>
Run Code Online (Sandbox Code Playgroud)

似乎编译器不知道如何比较字符串.也许她对字符串知之甚少,但过于专注于你map自己想出ATM.


tda*_*ers 5

尝试m[s1] = v1;一下。


小智 5

这是设置 map<...,...> 的方法

static std::map<std::string, RequestTypes> requestTypesMap = {
   { "order",       RequestTypes::ORDER       },
   { "subscribe",   RequestTypes::SUBSCRIBE   },
   { "unsubscribe", RequestTypes::UNSUBSCRIBE }
};
Run Code Online (Sandbox Code Playgroud)