2017-07-07 45 views
-1

我努力學習如何std::map的作品,我有以下問題的結構:映射的int在C++載體

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); 
} 

目前我得到:

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); 

我想成爲能夠將id映射到由兩個向量構成的struct,該向量被填充到for循環中。我究竟做錯了什麼?或者有更好的方法來映射這個?

+4

嘗試重命名的2'stuff' – JVApen

回答

5

stuffstruct stuff定義爲struct,但隨後} stuff;在端重新定義stuff作爲stuff類型的變量。

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

其結果是,沒有類型命名爲stuffstd::map<int, stuff>使用。

您可以通過重命名結構類型解決問題:

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

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

這工作之一!另外,是插入添加東西到地圖的最佳方式?我應該怎麼做呢? – Blizzard

+2

@Blizzard在這種情況下,你應該發佈一個新的問題。 – Ron

+1

@Blizzard很難回答那個問題。最好的相對於什麼? 'smap [foo_id] =東西;'很容易閱讀。 'smap.insert(foo_id,stuff);'可能會快一點。 'emplace'可以讓你避免一些冗餘的作業和構造,通過構建一切到位。 – user4581301