2013-06-28 98 views
1

C++編譯器錯誤時,C++編譯的問題是:試圖插入一個地圖,我得到

line 27: Error: Could not find a match for 
    std::multimap<std::string, std::vector<std::string>, 
        std::less<std::string>, 
        std::allocator<std::pair<const std::string, 
         std::vector<std::string>>>> 
    ::insert(std::pair<std::string, std::vector<std::string>>) 
    needed in main(). 
1 Error(s) detected. 

下面是我的程序:

#include<iostream> 
#include<sstream> 
#include<map> 
#include<vector> 
#include<algorithm> 
using namespace std; 

typedef multimap<string, vector<string> > mos_map; 
typedef multimap<string, vector<string> >::iterator mos_map_it; 

int main() 
{ 

    mos_map mos; 
    mos_map_it it; 

    vector<string> v1; 

    v1.push_back("a"); 
    v1.push_back("b"); 
    v1.push_back("c"); 
    v1.push_back("mo1"); 

    std::string a(*(v1.end()-1)); 

    mos.insert(std::pair< std::string, vector<std::string> >(a,v1)); 
    //Is the above not the right way to to insert an element into the map? 
    return 0; 
} 

上面的代碼拋出一個編譯錯誤時我嘗試用一​​個字符串作爲key來插入一個向量作爲值。我在solaris上工作。

+4

你忘了'的#include '。 –

+0

即使添加了#include ,我也得到了同樣的錯誤。 – user1939168

+1

你使用的是什麼編譯器? –

回答

-1

在地圖中插入元件正確的做法是:

mos[a] = v1 

(由於地圖已重載的運算符[])

+0

這是方便的方法。這也是效率較低的方法:如果地圖中還沒有「a」,則首先創建一個默認值,然後將「v1」分配給新的地圖條目。 'insert'不是這種情況。 – xtofl

+0

這是我使用的第一件事,它不起作用。 – user1939168

+0

這工作:'mos.insert(mos_map :: value_type(a,v1));' – user1939168

相關問題