【问题标题】:How to keep in sync looping over 2 maps?如何在 2 张地图上保持同步循环?
【发布时间】:2020-11-25 10:09:28
【问题描述】:

如何在 2 个地图上同步循环?
可能是 map1 或 map2 包含更多键。
我如何设置偏好?并增加相应的迭代器?

2 个地图的示例值:

4 7 10 11 12 13 14 
3 4 7 8 10 11 12 13 14 

map1 不包含“3”

What's the best way to iterate over two or more containers simultaneously

std::map<int, int> map1;
std::map<int, int> map2;
auto itA = begin(map1);
auto itB = begin(map2);

while(itA != end(map1) || itB != end(map2))
{
    if(itA != end(map1))
    {
        ++itA;
    }
    if(itB != end(map2))
    {
        ++itB;
    }
}

使用此代码会导致您尝试比较 2 个不相等的数字/值。
所以你必须停止递增一个或另一个迭代器,直到两个值相等。

【问题讨论】:

  • 你到底想达到什么目的?
  • @AlanBirtles 一件事:就是找到那些地图中没有出现的数字。
  • 那么,链接的主题没有回答您的问题?
  • 两者都不存在的键或值?
  • @AlanBirtles,键“auto it = map1.find([value]);”很简单,但是确定上述循环代码的女巫迭代器递增的正确“或”语句直到见面。

标签: c++ iterator compare std


【解决方案1】:

我找到了答案:

if(map1.first == map2.first){
    if(itA != end(map1)){
        ++itA;
    }
    if(itB != end(map2)){
        ++itB;
    }
}
else if(map1.first < map2.first){
    if(itA != end(map1)){
        ++itA;
    }
}
else if(map1.first > map2.first){
    if(itB != end(map2)){
        ++itB;
    }
} 

【讨论】:

  • 可以删除第一个if 块并将else ifs 更改为if &lt;=if &gt;=
猜你喜欢
  • 2011-12-12
  • 2013-08-30
  • 2019-07-02
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多