在struct vector的map中存储值

时间:2015-02-10 16:50:35

标签: c++ dictionary vector struct iterator

我在将值插入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:用户1
。 。 。
PC10:User10

int i = 2
PC1:用户1
。 。 。
PC10:User10
PC1:User11
。 。 。
PC10:User20

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

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

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

1 个答案:

答案 0 :(得分:1)

这将实现您可能想要的目标:

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));
}