我需要以钥匙值格式存储字符串。因此,您正在使用下面的地图。

#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
}

在插入线上的错误低于错误

错误c2784:'bool std ::操作员<(const std :: _ tree <_traits>&,const std :: _ tree <_traits>&)':无法推论'const std :: _ tree <_ treat <_traits>&'的template参数来自'const std :: string'

我尝试了下面的sake_pair函数,但这也报告了相同的错误。

m.insert(make_pair(s1, v1));

请让我知道上述问题的问题和解决方案是什么。解决上述问题之后,我可以像以下那样使用以下基于键检索值

m.find(s1);
有帮助吗?

解决方案

我想你想念一个 #include <string> 某处。

其他提示

您能尝试一下:

#include<string>

似乎编译器不知道如何比较字符串。也许她对字符串还不够了解,但过于专注于您 map 找出ATM。

尝试 m[s1] = v1; 反而。

您现在有几种可能性的键值格式存储字符串:

m["key1"] = "val1";
m.insert(pair<string,string>("key2", "val2"));
m.insert({"key3", "val3"}); // c++11

并在C ++ 11中穿越它:

for( auto it = m.begin(); it != m.end(); ++it )
{
  cout << it->first; // key
  string& value = it->second;
  cout << ":" << value << endl;
}

这是设置地图<...,...>的方法

static std::map<std::string, RequestTypes> requestTypesMap = {
   { "order",       RequestTypes::ORDER       },
   { "subscribe",   RequestTypes::SUBSCRIBE   },
   { "unsubscribe", RequestTypes::UNSUBSCRIBE }
};

我认为这与以下事实有关 <map> 不包括 <string>, , 但 <xstring>. 。当您将元素添加到地图中时,需要通过排序在地图中找到正确的位置。分类时,地图试图找到 operator <, ,从中找到新元素的正确位置。但是,没有 operator < 用于字符串的定义 <xstring>, ,因此您会收到错误消息。

S1是您希望通过字符串的整数...这可能是错误的主要原因!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top