我真的在这里粉碎了我的大脑,因为我的代码似乎没有起作用。我有一个包含元素的结构(调用结构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个实例应该在里面:((((任何帮助?
答案 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
该代码应该可以帮助您了解哪种类型