2014-07-08 38 views
-3

因爲我的代碼看起來沒有工作,所以我在這裏真的把我的大腦粉碎了。我有一個包含元素的結構體(稱爲結構體A)。包含std :: strings和std :: vector的地圖<Another_Struct>

我還有一個結構(B),看起來像這樣:

struct B 
{ 
    std::string m_strID; 
    std::map<std::string, std::vector<A>> m_mmap; 
    std::map<std::string, std::vector<A>> m_mmap1; 

    B() 
    { 
    } 
}; 

我想填充用這個地圖爲例(說B是B的一個實例,A型的實例):

b[a[i].anElement].m_mmap[a[i].anElement].push_back(a[i]); 

這裏面一個for循環,我希望會的A的實例添加到值(這是一個向量)的地圖...但它不是,總有1元素在那裏,即使我有672個實例應該在裏面:((((任何幫助?

+1

只是'灣m_mmap [aVariableOfTypeA [i] .anElement] .push_back(fTypeA [i]);' – 101010

+8

你是...... _literally粉碎你的大腦out_?停止!! –

+0

請不要將變量命名爲「m_mmap」和「m_mmap1」。 – NicholasM

回答

2

首先使用的typedef:

struct B 
{ 
    std::string m_strID; 
    typedef std::vector<A> VectorOfA; 
    typedef std::map<std::string, VectorOfA> MyMap; 
    MyMap m_mmap; 
    MyMap m_mmap1; 

    B() 
    {  
    } 
}; 

它不僅節省打字而且還會使你的程序更易讀且不易出錯。

要填充:

B b; 
... 
b.m_mmap[ aVariableOfTypeA[i].anElement ].push_back(aVariableOfTypeA[i]); 

你說B是B類的一個實例,因此沒有理由適用[]爲b,因爲它不是數組也不容器。

現在typedef也可以幫助你瞭解什麼是錯在你的代碼,爲什麼你只看到大小1:

B b; 
std::cout << "size of map: " << b.m_mmap.size() << std::endl; 
B::VectorOfA &vref = b.m_mmap[ somestring ]; 
std::cout << "size of vector:" << vref.size() << std::endl; 
A &aref = v[0]; // first element 

該代碼應該幫助你瞭解哪些類型就是

相關問題