2017-07-07 3 views
-1

ich zu lernen versuche wie std::map funktioniert, ich folgendes Problem:einen int zu einer Struktur von Vektoren in C Mapping ++

int id; // stores some id 

struct stuff { 
    std::vector<int> As; 
    std::vector<int> Bs; 
} stuff; 

std::map<int, stuff> smap; 

void foo() { 
    int count = 2; 
    int foo_id = 43; 
    for (int i = 0; i < count; count++) { 
     stuff.As.push_back(count); 
     stuff.Bs.push_back(count); 
    } 
    smap.insert(foo_id, stuff); 
} 

Derzeit erhalte ich:

error: type/value mismatch at argument 2 in template parameter list for ‘template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map’ 
    std::map<int, stuff> smap; 

error: request for member ‘insert’ in ‘smap’, which is of non-class type ‘int’ 
    smap.insert(int, stuff); 

ich sein will fähig, die id zu der struct abzubilden, die aus zwei Vektoren besteht, die in einer for-Schleife bevölkert werden. Was mache ich falsch? Oder gibt es einen besseren Weg dies zu kartieren?

+4

Führen Sie eine der 2 'stuff' – JVApen

Antwort

5

struct stuff definiert stuff als struct, aber dann } stuff; am Ende definiert stuff als Variable vom Typ stuff.

struct stuff { // stuff is a struct 
    std::vector<int> As; 
    std::vector<int> Bs; 
} stuff; // stuff is now a variable of type stuff. 

Als Ergebnis gibt es keine Art stuff für std::map<int, stuff> Namen zu verwenden.

Sie können das Problem beheben, indem die Strukturtyp Umbenennung:

struct stuff_t { 
    std::vector<int> As; 
    std::vector<int> Bs; 
} stuff; 

std::map<int, stuff_t> smap; 
+0

Umbenennung Das hat geklappt! Außerdem, fügen Sie den besten Weg ein, Sachen zur Karte hinzuzufügen? Wie soll ich das machen? – Blizzard

+2

@Blizzard In diesem Fall sollten Sie eine neue Frage stellen. – Ron

+1

@Blizzard schwer zu beantworten. Am besten im Vergleich zu was? 'smap [foo_id] = stuff;' ist ziemlich leicht zu lesen. 'smap.insert (foo_id, stuff);' könnte ein bisschen schneller sein. 'emplace' kann Ihnen erlauben, einige überflüssige Aufgaben und Konstruktionen auszuweichen, indem Sie alles an seinem Platz konstruieren. – user4581301

Verwandte Themen