19

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

#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::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)' : 无法推导出 'const std::_Tree<_Traits> &' 的模板参数来自 'const std::string'

我也尝试了 make_pair 函数,如下所示,但这也报告了同样的错误。

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

请让我知道出了什么问题以及上述问题的解决方案是什么。解决上述问题后,我可以像下面这样使用基于键检索值吗

m.find(s1);
4

7 回答 7

41

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

于 2010-09-14T12:55:29.303 回答
9

你能试试这个:

#include<string>

编译器似乎不知道如何比较字符串。也许她对字符串的了解还不够,但是太专注于您map而无法弄清楚 ATM。

于 2010-09-14T12:58:30.250 回答
6

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

static std::map<std::string, RequestTypes> requestTypesMap = {
   { "order",       RequestTypes::ORDER       },
   { "subscribe",   RequestTypes::SUBSCRIBE   },
   { "unsubscribe", RequestTypes::UNSUBSCRIBE }
};
于 2018-12-20T08:04:46.207 回答
3

试试m[s1] = v1;吧。

于 2010-09-14T12:53:58.980 回答
3

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

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;
}
于 2018-09-08T14:22:23.993 回答
1

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

于 2010-09-14T13:25:11.700 回答
-2

s1 是您希望作为字符串传递的整数......这可能是错误的主要原因!

于 2016-03-14T13:46:39.303 回答