包含 std::string 和 std::vector <Another_Struct>的映射

A map containing std::strings and std::vector<Another_Struct>

本文关键字:std Struct 映射 gt lt string vector 包含 Another      更新时间:2023-10-16

我简直是在砸我的脑袋,因为我的代码似乎无法工作。我有一个包含元素的结构体(称为结构体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到映射的实例…但它不是,总是有一个元素在那里,即使我有672个实例,应该在里面:(((((有人帮助吗?

首先使用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 

这段代码应该可以帮助您理解在