包含std :: strings和std :: vector <another_struct> </another_struct>的映射

时间:2014-07-08 22:10:40

标签: c++ vector map struct

我真的在这里粉碎了我的大脑,因为我的代码似乎没有起作用。我有一个包含元素的结构(调用结构A)。

我有另一个结构(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 个答案:

答案 0 :(得分: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 

该代码应该可以帮助您了解哪种类型