【问题标题】:Storing values inside a map of struct vector将值存储在结构向量的映射中
【发布时间】:2015-02-10 16:50:35
【问题描述】:

我在将值插入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 的值有什么建议吗?

【问题讨论】:

  • 你在std::map上打电话给push_back...
  • @zenith 对不起。我把它改回insert。谢谢提醒^^

标签: c++ dictionary vector struct iterator


【解决方案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));
}

【讨论】:

  • 是一样的。我想要实现的是地图中的每个i 都包含该迭代的值。意思是在i=1 中,它只包含 PC1:User1PC10:User10 而在i=2 中,它只包含 PC1:User11PC10:User20。并且 PC1 内部的值对于 User11 到 User20 保持不变。
  • @JoelSeah 如果我理解正确,您需要在外部for 中声明myVec,在内部for 之前。然后,对于每个i,它将以一个空的vector 开头,您使用PC1-10 和相应的用户填充它。这就是你想要的吗?
  • 是的,除了例如 PC1 是一个具有 string paidint num 的结构并且具有值 PC1:1。我想为下一次迭代保留 PC1 的值i
  • 我的意思是string pcid
  • @JoelSeah 是的,我认为我所描述的内容不应该改变vecA 的内容,所以你只需将push_back 你的structAs 从vecA 更改为myVec,它将永远push_back 相同的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 2022-07-11
相关资源
最近更新 更多