2015-02-10 49 views
0

我在將值插入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:用戶1
。 。 。
PC10:User10
PC1:User11
。 。 。
PC10:User20

myMap的結果不是我想要的。它應該是這樣的:
int i = 1
PC1:User1
。 。 。
PC10:User10

INT I = 2
PC1:User11
。 。 。
PC10:User20

似乎爲myMapI = 2,它將包含數值從I = 1爲好。
在將矢量插入地圖之前,我嘗試過myVec.clear(),但我需要structA的值保持不變。 因此,如何建議我如何儲存只有的值爲我= 2

+0

你調用'上'的std :: map' ... – emlai 2015-02-10 16:56:04

+0

@zenith不好意思啊push_back'。我改變它回到'insert'。感謝提醒^^ – 2015-02-11 03:10:59

回答

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

它是一樣的東西。我想要實現的是映射中的每個「i」都包含該迭代的值。在'i = 1'中的含​​義只包含* PC1:User1 *至* PC10:User10 *,在'i = 2'中僅包含* PC1:User11 *至* PC10:User20 *。並且PC1內部的值對於User11到User20保持不變。 – 2015-02-11 06:09:38

+0

@JoelSeah如果我理解正確,你需要在''for'之前在''for'外部聲明'myVec'。然後,對於每個'i',它將從一個空的'vector'開始,填入PC1-10和相應的用戶。那是你要的嗎? – emlai 2015-02-11 10:32:21

+0

是的,除了例如PC1是一個結構'string paid'和'int num'並且值爲PC1:1。我想在下一次迭代'i'時保留PC1的值。 – 2015-02-11 16:18:52