2010-09-14 51 views
9

我需要以键值格式存储字符串。所以我使用如下图。map <string,string>如何在此映射中插入数据?

#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:“布尔的std ::操作<(常量的std :: _树< _Traits> &,常量的std :: _树< _Traits> & )”:不能推导出模板参数的 '常量的std :: _树< _Traits> &' 从 '常量的std :: string'

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

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

请让我知道什么是错的,以及上述问题的解决方案是什么。 解决上述问题后,我可以使用如下基于关键字来检索值

m.find(s1); 

回答

31

我想你错过了#include <string>某处。

+0

这使得代码编译。但是我想知道为什么当我说string s1 =“1”时它没有给出错误;只有在调用插入时才会出错。 – bjskishore123 2010-09-14 13:00:45

+0

@ bjskishore123:也许你有另一个名字是'string'的类,它会与'std :: string'发生碰撞? – ereOn 2010-09-14 13:11:47

+2

@ereOn - 或者这可能不是唯一的编译器错误 – 2010-09-14 13:22:08

2

尝试m[s1] = v1;代替。

+0

这也给出了相同的错误。 – bjskishore123 2010-09-14 12:55:06

+0

这使您无法判断您是插入新节点还是更新预先存在的节点。 – 2010-09-14 14:55:13

4

你能试试这个:

#include<string> 

看来编译器不知道如何比较字符串。也许她对字符串还不够了解,但是太专注于你的map来弄清楚自动取款机。

+0

哦,有趣!编译器*她*?好的,我可以同意这一点。 :) - 就像我们的大自然和银河系一样(梵文中:Shish-shu-maa-ra = She-dolphin)。 – 2015-11-24 07:55:32

1

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

-2

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

相关问题