2014-01-23 50 views
-2

我想要使用一個結構作爲地圖中的值。爲什麼我必須使用value_type將某些內容插入到地圖中?C++結構在地圖中的值 - 錯誤「重載函數沒有實例匹配參數列表」

#include <map> 

struct myStruct {}; 

int main() 
{ 
    std::map<int,myStruct> myStructMap; 
    myStruct t; 

    myStructMap.insert(std::map<int,myStruct>::value_type(1, t)); // OK 

    myStructMap.insert(1,t); 
    // Error: 
    // "no instance of overloaded function 'std::map [...]' matches 
    // the argument list" 
} 
+4

'struct'是一個關鍵字。你不應該用它來命名一些東西。 – juanchopanza

+0

我真的很想知道爲什麼收到了一個投票?我把這個問題形成了幾分鐘,旁邊的那個編了C++幾年的人也不知道原因...... –

+2

@SebastianSchmitz:那麼他應該立即被解僱。什麼是'myStructMap.insert(1,struct);'應該是什麼意思?!你也錯過了';'。這不是你的測試用例。 –

回答

6

很簡單,不存在這樣的功能如std::map::insert,是以密鑰作爲一個參數,該值作爲另一個。

預計std::map::insert與地圖的實際值類型,它是std::pair<const Key, Value>

當然,C++標準庫可能已經爲您提供了這種重載,但它沒有理由。

,做類似的東西你想要做什麼的唯一功能,就是C++ 11 emplace(和emplace_hint):

myStructMap.emplace(1,t); 

在這個例子中,參數是直接轉發到構造函數value_type

+0

但'value_type' typedefed爲\t'pair ';哦,也許提到'emplace';) – Paranaix

+0

我知道,但爲了完整起見,我寫了它;) – Paranaix

+0

爲什麼std :: map myMap; myMap.insert(1,1);工作呢? –

相關問題