2010-09-14 80 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是一個你希望作爲字符串傳遞的整數......這可能是錯誤的主要原因!

相關問題