将值存储在结构向量的映射中

Storing values inside a map of struct vector

我在向 map<int,vector<pair<structA,structB> > > 中插入值时遇到问题。 我有 2 个 structAstructB 用来存储数据。然后使用几个 for 循环,我将值存储到地图中。

下面是简化代码:

vector<structB>::iterator b = vecB.begin();
vector<pair<structA,structB> > myVec;
map<int,vector<pair<structA,structB> > > myMap;
for (int i = 1; i < 3; i++) {
    for (vector<structA>::iterator a = vecA.begin(); a != vecA.end() ; a++) {
        //...do stuff here
        //push data into myVec
    ++b
    }
    myMap.insert(make_pair(i,myVec));
}

我从 myMap 得到这样的结果。
为了简单起见,假设 structAstructB 分别是 PC1-PC10 和 User1-User20。
int i = 1
PC1:User1
. . .
PC10:User10

int i = 2
PC1:User1
. . .
PC10:User10
PC1:User11
. . .
PC10:User20

myMap 的结果不是我想要的。它应该是这样的:
int i = 1
PC1:User1
. . .
PC10:User10

int i = 2
PC1:User11
. . .
PC10:User20

似乎对于 myMap i=2,它也将包含来自 i=1 的值。
在将向量插入地图之前,我尝试了 myVec.clear(),但我需要 structA 中的值保持不变。 那么关于如何存储 only 值的任何建议 i=2?

这将完成您可能想要的:

vector<structB>::iterator b = vecB.begin();
map<int,vector<pair<structA,structB> > > myMap;
for (int i = 1; i < 3; i++) {
    vector<pair<structA,structB>> myVec; // Initialize empty vector
    for (vector<structA>::iterator a = vecA.begin(); a != vecA.end() ; a++) {
        //...do stuff here
        myVec.push_back(make_pair(*a,*b)); // Make a structA-structB pair and add it to myVec
        ++b;
    }
    myMap.insert(make_pair(i,myVec));
}