我需要以键值格式存储字符串。所以我正在使用如下的地图。
#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&lt;(const std :: _ Tree&lt; _Traits&gt;&amp;,const std :: _ Tree&lt; _Traits&gt;&amp;)':无法推断'const std ::的模板参数_Tree&LT; _Traits&GT; &安培;”来自'const std :: string'
我也尝试过make_pair函数,如下所示,但这也报告了相同的错误。
m.insert(make_pair(s1, v1));
请让我知道什么是错的,以及解决上述问题的方法是什么。 解决了上述问题后,我可以使用下面的方法来检索基于密钥的值
m.find(s1);
答案 0 :(得分:34)
我想你错过了某个#include <string>
。
答案 1 :(得分:6)
你可以试试这个:
#include<string>
似乎编译器不知道如何比较字符串。也许她对字符串知之甚少,但是过于专注于你的map
来解决这个问题。
答案 2 :(得分:2)
请尝试m[s1] = v1;
。
答案 3 :(得分:2)
您现在有几种可能如何以键值格式存储字符串:
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;
}
答案 4 :(得分:1)
我认为这与<map>
不包括<string>
,而是<xstring>
的事实有关。当您向地图添加元素时,需要通过排序在地图中找到正确的位置。排序时,map会尝试找到operator <
,从中找到新元素的正确位置。但是,operator <
中的字符串定义没有<xstring>
,因此您会收到错误消息。
答案 5 :(得分:0)
这是设置地图的方法<...,...>
static std::map<std::string, RequestTypes> requestTypesMap = {
{ "order", RequestTypes::ORDER },
{ "subscribe", RequestTypes::SUBSCRIBE },
{ "unsubscribe", RequestTypes::UNSUBSCRIBE }
};
答案 6 :(得分:-2)
s1是一个你希望以字符串形式传递的整数...这可能是错误的主要原因!!