簡體   English   中英

將值存儲在結構向量的映射內

[英]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。
整數i = 1
PC1:用戶1

PC10:User10

整數i = 2
PC1:用戶1

PC10:User10
PC1:User11

PC10:User20

myMap的結果不是我想要的。 應該是這樣的:
整數i = 1
PC1:用戶1

PC10:User10

整數i = 2
PC1:User11

PC10:User20

似乎對於myMap i = 2 ,它也將包含i = 1的值。
在將向量插入到映射中之前,我已經嘗試過myVec.clear() ,但是我需要structA的值保持不變。 因此,關於如何存儲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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM