首页 文章

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

提问于
浏览
12

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

#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>&的模板参数'from'const std :: string'

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

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

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

m.find(s1);

8 回答

  • 1

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

    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;
    }
    
  • -2

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

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

    你可以尝试std ::之前它可能会工作

  • 0

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

  • -1

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

  • 6

    你能试一试吗:

    #include<string>
    

    似乎编译器还没有充分了解字符串,但过于专注于你的 map 来解决这个问题 .

  • 1

    请尝试使用 m[s1] = v1; .

  • 2

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

相关问题