【问题标题】:map<string, string> how to insert data in this map?map<string, string> 如何在这个地图中插入数据?
【发布时间】:2011-04-12 03:54:26
【问题描述】:

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

#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> &' from 'const std::string'

我也尝试了下面的 make_pair 函数,但也报告了同样的错误。

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

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

m.find(s1);

【问题讨论】:

    标签: c++ stl stdstring stdmap


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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;
      }
      

      【讨论】:

      • m.insert({"key3", "val3"}); // c++11 帮助了我
      【解决方案3】:

      s1 是一个整数,您希望将其作为字符串传递...这可能是导致错误的主要原因!!

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          你可以试试这个:

          #include<string>
          

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

          【讨论】:

          • 哦,有趣!编译器是she吗?好吧,我可以同意这一点。 :) - 就像我们的大自然母亲和银河系(梵文:Shi-shu-maa-ra = She-dolphin)。
          【解决方案6】:

          我想你在某处错过了#include &lt;string&gt;

          【讨论】:

          • 这使得代码被编译。但是我想知道为什么当我说 string s1 = "1"; 时它没有给出错误;只有在调用 insert 时才会出错。
          • @bjskishore123: 也许你有另一个名为string 的类不知何故与std::string 发生冲突?
          • 我已经在最新的 VS 2012 版本上对此进行了测试,它做同样的事情。它不会抱怨未定义字符串,这非常令人困惑和奇特。
          【解决方案7】:

          改用m[s1] = v1;

          【讨论】:

          • 这使您无法判断您是插入了新节点还是更新了现有节点。
          猜你喜欢
          • 2014-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-14
          • 1970-01-01
          • 1970-01-01
          • 2013-12-18
          • 1970-01-01
          相关资源
          最近更新 更多